I'm building a game where I need to calculate the projection of one vector on another. I've written a C++ function to return the projection of a vector onto another vector, but I'm getting surprising results that have me questioning my understanding of this operation...

I have a vector $\vec{A}$ defined in $3$-space as: $(5, 3, 2)$. I have a vector $\vec{B}$ defined in 3-space as: $(0, 0, -1)$. Now, if I understand this right, projecting $\vec{A}$ onto $\vec{B}$, would result in a vector in the direction of $\vec{B}=(0, 0, -1)$ with the magnitude of $\vec{A}$... or:

$(0, 0, -2)$.

Is this right, or I am butchering it? My function keeps returning (with the above test case): $(0, 0, 2)$. The magnitude seems correct, but the direction seems wrong. I'm calculating this by doing:

$$\frac{(\vec{A} \cdot \vec{B})}{(\vec{B} \cdot \vec{B})} \cdot \vec{B}.$$

  • $\begingroup$ Eh... is it as simple as taking the absolute value of the scalar on the left side of the equation? $\endgroup$ – David Jun 17 '11 at 22:06

Your formula, your calculation and your answer $(0,0,2)$ are correct. This has nothing to do with the magnitude of (A), which is $\sqrt{5^2+3^2+2^2}=\sqrt{38}$. The projection of (A) along (B) is the component of (A) that lies along the line spanned by (B); this can be a vector pointing in the same direction as (B) or in the opposite direction, depending on (A).

To get a clearer grasp of this, you could restrict your example to two dimensions, say, $(3,2)$ for (A) and $(0,-1)$ for (B), and draw these vectors and the resulting projection on graph paper.

  • $\begingroup$ Great, that makes a lot more sense. Thanks Joriki! $\endgroup$ – David Jun 18 '11 at 0:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.