To add to Savlons answer:
There are two ways of doing this
Vector2D objects(Assuming your positions are vectors):
Vector2D diffVec(B.posVec-A.posVec); diffVec.normlize(); //Assuming it's applied on the vector itself // and does not return a new one. //This vector is now a unit vector which represents the heading/Direction //without the "speed" (Well its speed is 1, more precisely its MAGNITUDE is 1). diffVec.multiply(speed); camera.velocity = diffVec;
The normalize function would probably look something like this:
void Vector2D::normalize(){ float len = length(); this.x /= len; this.y /= len; }; float Vector2D::length(){ return sqrt(x*x+y*y); };
Now if you're not using vectors this could be translated to:
float dx = destinationX-positionX; float dy = destinationY-positionY;
Let's pretend dx and dy are the components of an imaginary vector. ( And by components I mean the x and y properties ).
We can perform the same calculations as we have in our Vector2D class: First we need to "normalize" our imaginary vector by dividing it by its length. Pythagoras theorem, remember that one?
float length = sqrtf(dx*dx+dy*dy);
Now we use this to normalize our imaginary vector:
dx/=length; dy/=length;
Now if we were to apply the Pythagoras theorem on our new dx and dy value you will notice that the length is 1. Meaning that we have a direction, and a magnitude of 1. To change it to our speed simply multiply each component by it.
dx *= speed; dy *= speed; cam.velocityX = dx; cam.velocityY = dy;
Imagine a vector to be an arrow with a specific length. When you normalize it you bring the length to one.

So if you multiply it ( by a scalar ), the speed in this case, the x and y components adjust accordingly that the length of the vector is the speed it's multiplied with.