How to get a BodyVelocity's original speed from its Velocity?

Hello,
I’m making a part in my game that reflects projectiles (makes them go in the direction of the reflector), however I’m having difficulty trying to make the projectile’s BodyVelocity go the same speed but in a different direction.

When the part hits the reflector from a different angle, its orientation will be the direction of the reflector, but the BodyVelocity’s Velocity will be faster than before… This ONLY happens when the projectile hits the reflector from a different angle

------ "BV" is the BodyVelocity. "p" is the projectile. "hit" is the reflector

local X = BV.Velocity.X
local Z = BV.Velocity.Z
if X < 0 then
	X = -X
end
if Z < 0 then
	Z = -Z
end
			
local vel = X + Z
BV.Velocity = hit.CFrame.LookVector * vel
p.Orientation = Vector3.new(p.Orientation.X,hit.Orientation.Y,p.Orientation.Z)

I know the speed increase is a cause of the X and Z adding up, increasing the speed, but I’m not sure how to fix this…

Suppose the projectile had initial velocity V, then if you want it to go in the opposite direction whilst retaining the same speed, you set the projectiles velocity to -V.

Simply put what you can do is use the following equation

Vi = 2(d/t) - Vf

D = distance
T = time
Vf = Final Velocity

Get the distance your object traveled from its intial position (You can find this by subtracting the two vectors and gettings there magnitude), Also keep a timer which looks at how it takes it to get to it’s final position.

I don’t want it to just go the opposite direction, I know how to do that. I want to make it go the same direction as the reflector’s lookvector

Ah, then maybe try BV.Velocity = hit.CFrame.LookVector * BV.Velocity.Magnitude