5
$\begingroup$

Suppose I have two vectors that are not orthogonal (let's say, an isometric grid) representing the new axis. Suppose I want to project a point onto these two vectors, how would I do it? Dot product only works for projecting a point orthogonally onto a vector, but now I want to project a point such that it is not along the orthogonal line, but respected to another vector.

For example, I found this picture in wikipedia: http://en.wikipedia.org/wiki/Projection_(linear_algebra)#Classification

Suppose I have two vectors that point in the same direction as line k and m. If I want to project a point onto axis m, I want to project it such that it follows along k onto m, not orthogonally. Then I can have my k and m as my new axis, and all the points will be projected respected to these two vectors.

3 Answers 3

9

Let's call your two "axis" vectors $U$ and $V$. The nice folks around here would probably call them "basis" vectors. And suppose you have some other vector $W$, lying in the plane of $U$ and $V$, that you want to decompose.

Essentially, you want to find two numbers $h$ and $k$ such that $W = hU + kV$ The vector $hU$ will be the projection of $W$ onto the $U$-axis in a direction parallel to $V$, and $kV$ will be the projection of $W$ onto the $V$-axis in a direction parallel to $U$. Draw a picture and you'll see why this is so.

Take dot products of the equation above with $U$ and $V$ in turn, getting $h(U \cdot U) + k(U \cdot V) = W \cdot U$ $h(V \cdot U) + k(V \cdot V) = W \cdot V$ Now you have two simultaneous equations for $h$ and $k$, which are easy to solve (using Cramer's rule, for example).

Of course, all of this is much easier if $U$ and $V$ are perpendicular, because then
$U \cdot V$ is zero. If $U$ and $V$ have unit length, it gets even easier, because then $U \cdot U$ and $V \cdot V$ are both equal to 1.

3

This projection onto two non-orthogonal vectors can be calculated more simply using the cross product. We know that the cross product of a vector with itself results in the zero vector. This is used to filter out both coefficients.

Suppose we have three vectors $\textbf{v}_1$, $\textbf{v}_2$ and $\textbf{v}_3$ all lying in the plane defined by the perpendicular unit vector $\textbf{n}_z$. Now we wish to find the projection of vector $\textbf{v}_1$ onto $\textbf{v}_2$ and $\textbf{v}_3$ such that:

$\textbf{v}_1=α\textbf{v}_2+β\textbf{v}_3$

Using the cross product of both base vectors we get two equations:

$\textbf{v}_2×\textbf{v}_1=α\textbf{v}_2×\textbf{v}_2+β\textbf{v}_2×\textbf{v}_3$ $\textbf{v}_3×\textbf{v}_1=α\textbf{v}_3×\textbf{v}_2+β\textbf{v}_3×\textbf{v}_3 $ As the cross product with itself maps to zero we can write: $\textbf{v}_2×\textbf{v}_1=β\textbf{v}_2×\textbf{v}_3$ $\textbf{v}_3×\textbf{v}_1=α\textbf{v}_3×\textbf{v}_2 $ Now the coefficients can be extracted for example using the fact the cross products are perpendicular to the plane defined by $\textbf{n}_z$. The dot product of the normal vector of the plane maps to the scalar: $\textbf{n}_z\cdot (\textbf{v}_2×\textbf{v}_1 )=β\textbf{n}_z\cdot (\textbf{v}_2×\textbf{v}_3)$ $\textbf{n}_z\cdot (\textbf{v}_3×\textbf{v}_1)=α\textbf{n}_z\cdot (\textbf{v}_3×\textbf{v}_2) $ Resulting in the following system: $\alpha = \frac{\textbf{n}_z\cdot (\textbf{v}_3×\textbf{v}_1)}{\textbf{n}_z \cdot (\textbf{v}_3×\textbf{v}_2)}$ $ \beta = \frac{\textbf{n}_z\cdot (\textbf{v}_2×\textbf{v}_1)}{\textbf{n}_z \cdot (\textbf{v}_2×\textbf{v}_3)}$

The nice thing is that this also work for non-unit length vectors and we need no matrix inversions.

1

Just directly building upon bubba's answer, in Matrix form this can be computed by doing $Y = \left(M^TM\right)^{-1}M^TW$ where $M=\left\{\begin{matrix} U \;\Big\vert\; V \end{matrix}\right\}$ is the matrix that contains the basis vectors and $Y=\left\{\begin{matrix} h\\ k \end{matrix}\right\}$ is the projection of $W$ (your original vector) on said basis.