Calculating position to position B with speed

I am trying to find out a formula that calculates the actual position of a player using his speed and a destination position.

These are the informations I have:

• Vector3 (X,Y,Z) : Current position
• Vector3 (X,Y,Z) : Destination position
• float : Speed

I can manage to calculate the angle between these two vectors, but I can't find an efficient formula to calculate the exact position using the speed at each loop. Do you have an idea?

EDIT*

I finally found a formula, but it's not really working as I want...

private void WalkNew()
{
float speed = 0.1f;
float distX = this.DestinationPosition.X - this.Position.X;
float distZ = this.DestinationPosition.Z - this.Position.Z;
float distance = (float)Math.Sqrt((distX * distX) + (distZ * distZ)); // distance between A and B positions

float time = distance / speed;
float currentTime = Time.GetTickFrom(this.lastMoveTime);
this.lastMoveTime = Time.GetTick();
float percentage = currentTime / time;

if (this.Position.IsInCircle(this.DestinationPosition, 0.1f))
{
// We arrived
}
else
{
this.Position.X += distX / percentage;
this.Position.Z += distZ / percentage;
}
}


Thanks

• Dividing by a percentage is not appropriate here. Why not use the formula given by Bálint in the answer below? It will work correctly, even with fractional speeds. Commented Feb 23, 2017 at 17:28

You subtract the current position from the destination position, this way you get a vector pointing to the destination.

You need to normalize this vector (divide it with it's length) and multiple with the speed. You get a velocity vector this way.

Finally you add this to the current position to get the new position.

In pseudo code:

currPos += normalize(dest - currPos) * speed


This way you don't need to uses that many costy function, such as atan2, cos or sin, only a square root.

• Thanks for your answer, that's much easier than my old formula using cos and sin. Thank you, I still have an other question about the speed. My speed is between 0 and 1 (current speed is 0.1) so I shouldn't multiply but divide the normalized vector right?
– user59955
Commented Feb 20, 2017 at 19:40
• @Eastrall Why is your speed between 0 and 1? You generally want to avoid division, because if by any chance speed becomes 0, then it'll probably throw an error Commented Feb 21, 2017 at 7:12
• I choose 0 and 1 because I thought it would be simple to implement this kind of formula. Maybe it is better to multiply it by 100 to obtain a % ? like: 0.1 would be 10%; 0 => 0% ; 1 => 100% ; etc...
– user59955
Commented Feb 21, 2017 at 8:23
• I've edit my main post with the formula
– user59955
Commented Feb 23, 2017 at 16:43