Book contents
Contents
raw Math

In two dimensions, two vectors can enclose an oriented area. If \(\mathbf{a},\mathbf{b}\in\mathbb{R}^2\), the (signed) area of the parallelogram that is spanned is measured by the 2D perp product. The sign of the perp product indicates the orientation of the vectors where a positive sign means one orientation, a negative sign means the opposite orientation.

In three dimensions, a similar idea exists. Two vectors still span a parallelogram, but now that parallelogram can point in any direction in space. A single scalar is no longer enough to describe its orientation.

We need an object that tells us how large the parallelogram is and which way it is facing. The 3D cross product, also called the vector product, is exactly this object. It turns two 3D vectors into an oriented area vector.

The vectors \(\mathbf{a}\) and \(\mathbf{b}\) span a plane. The cross product \(\mathbf{a}\times\mathbf{b}\) points perpendicular to that plane.

How Do We Represent a Plane Area?

Let \(\mathbf{a}\) and \(\mathbf{b}\) be two vectors in \(\mathbb{R}^3\). They span a parallelogram with area

\[ \underbrace{\|\mathbf{a}\|}_{\text{base}} \underbrace{\|\mathbf{b}\|\sin\theta}_{\text{height}}, \]

where \(\theta\) is the angle between \(\mathbf{a}\) and \(\mathbf{b}\), with \(0\leq\theta\leq\pi\).

The parallelogram has base \(\|\mathbf{a}\|\) and height \(\|\mathbf{b}\|\sin\theta\), hence area \(\|\mathbf{a}\|\,\|\mathbf{b}\|\sin\theta\).

But this gives only the size. It does not say on which side of the plane the area points. In 3D, an oriented plane area is most naturally represented by a vector that is perpendicular to the plane itself.

Derivation of the Cross Product

A vector \(\mathbf{c}\) is perpendicular to \(\mathbf{a}\) exactly when their dot product is zero:

\[ \mathbf{a}\cdot\mathbf{c}=0. \]

Therefore, if \(\mathbf{c}\) is supposed to be perpendicular to the whole plane spanned by \(\mathbf{a}\) and \(\mathbf{b}\), it must be perpendicular to both:

\[ \mathbf{a}\cdot\mathbf{c}=0, \qquad \mathbf{b}\cdot\mathbf{c}=0. \]

Write

\[ \mathbf{a}:= \begin{pmatrix} a_x\\ a_y\\ a_z \end{pmatrix}, \qquad \mathbf{b}:= \begin{pmatrix} b_x\\ b_y\\ b_z \end{pmatrix}, \qquad \mathbf{c}:= \begin{pmatrix} c_x\\ c_y\\ c_z \end{pmatrix}. \]

The two perpendicularity conditions become

\[ a_xc_x+a_yc_y+a_zc_z=0, \]

\[ b_xc_x+b_yc_y+b_zc_z=0. \]

We now search for a non-zero vector \(\mathbf{c}\) satisfying both equations. To eliminate \(c_z\), multiply the first equation by \(b_z\), the second by \(a_z\), and subtract:

\[ (a_xb_z-a_zb_x)c_x+(a_yb_z-a_zb_y)c_y=0. \]

This has the form

\[ pc_x+qc_y=0. \]

A natural solution is

\[ c_x:=q, \qquad c_y:=-p. \]

Here this gives

\[ c_x:=a_yb_z-a_zb_y, \qquad c_y:=a_zb_x-a_xb_z. \]

Substituting back into either dot-product equation gives

\[ c_z:=a_xb_y-a_yb_x. \]

So the vector that naturally appears from the two perpendicularity conditions is

\[ \mathbf{c} = \begin{pmatrix} a_yb_z-a_zb_y\\ a_zb_x-a_xb_z\\ a_xb_y-a_yb_x \end{pmatrix}. \]

This is the coordinate formula of the cross product:

\[ \boxed{ \mathbf{a}\times\mathbf{b} := \begin{pmatrix} a_yb_z-a_zb_y\\ a_zb_x-a_xb_z\\ a_xb_y-a_yb_x \end{pmatrix} }. \]

Why This Vector Encodes Area

We have found the normal direction from the dot product. Now we still need to understand why its length is the area of the parallelogram.

The key identity is Lagrange's identity:

\[ \|\mathbf{a}\times\mathbf{b}\|^2 = \|\mathbf{a}\|^2\|\mathbf{b}\|^2 - (\mathbf{a}\cdot\mathbf{b})^2. \]

Since

\[ \mathbf{a}\cdot\mathbf{b} = \|\mathbf{a}\|\,\|\mathbf{b}\|\cos\theta, \]

we get

\[ \begin{aligned} \|\mathbf{a}\times\mathbf{b}\|^2 &= \|\mathbf{a}\|^2\|\mathbf{b}\|^2 - \|\mathbf{a}\|^2\|\mathbf{b}\|^2\cos^2\theta\\ &= \|\mathbf{a}\|^2\|\mathbf{b}\|^2(1-\cos^2\theta)\\ &= \|\mathbf{a}\|^2\|\mathbf{b}\|^2\sin^2\theta. \end{aligned} \]

Because \(0\leq\theta\leq\pi\), we have \(\sin\theta\geq 0\). Therefore

\[ \boxed{ \|\mathbf{a}\times\mathbf{b}\| = \|\mathbf{a}\|\,\|\mathbf{b}\|\sin\theta }. \]

So the same vector found from perpendicularity also has exactly the correct area as its length.

In short:

\[ \mathbf{a}\times\mathbf{b} = \underbrace{\text{normal direction}}_{\text{orientation}} \cdot \underbrace{\text{parallelogram area}}_{\text{magnitude}}. \]

Definition

The cross product used here is defined for vectors in \(\mathbb{R}^3\).

Let \(\mathbf{a},\mathbf{b}\in\mathbb{R}^3\). The 3D cross product is the vector

\[ \mathbf{a}\times\mathbf{b} := \begin{pmatrix} a_yb_z-a_zb_y\\ a_zb_x-a_xb_z\\ a_xb_y-a_yb_x \end{pmatrix}. \]

It is perpendicular to both \(\mathbf{a}\) and \(\mathbf{b}\), and its length is

\[ \|\mathbf{a}\times\mathbf{b}\| = \|\mathbf{a}\|\,\|\mathbf{b}\|\sin\theta. \]

Therefore it represents the oriented area of the parallelogram spanned by \(\mathbf{a}\) and \(\mathbf{b}\).

Direction and the Right-Hand Rule

There are always two possible perpendicular directions to a plane and the cross product chooses one of them by convention.

In a right-handed coordinate system, the standard basis vectors satisfy

\[ \mathbf{i}\times\mathbf{j}=\mathbf{k}, \qquad \mathbf{j}\times\mathbf{k}=\mathbf{i}, \qquad \mathbf{k}\times\mathbf{i}=\mathbf{j}. \]

These are the positive cyclic directions. Reversing the order reverses the sign:

\[ \mathbf{j}\times\mathbf{i}=-\mathbf{k}, \qquad \mathbf{k}\times\mathbf{j}=-\mathbf{i}, \qquad \mathbf{i}\times\mathbf{k}=-\mathbf{j}. \]

This is the algebraic version of the right-hand rule: if your index finger points in the direction of \(\mathbf{a}\), and your middle finger points in the direction of \(\mathbf{b}\), then your thumb points in the direction of \(\mathbf{a}\times\mathbf{b}\).

With \(\mathbf{i},\mathbf{j},\mathbf{k}\) as the standard basis vectors, the full basis multiplication table is

\[ \begin{array}{c|ccc} \times & \mathbf{i} & \mathbf{j} & \mathbf{k}\\ \hline \mathbf{i} & \mathbf{0} & \mathbf{k} & -\mathbf{j}\\ \mathbf{j} & -\mathbf{k} & \mathbf{0} & \mathbf{i}\\ \mathbf{k} & \mathbf{j} & -\mathbf{i} & \mathbf{0} \end{array} \]

The Determinant Mnemonic

The coordinate formula is often remembered with the determinant mnemonic

\[ \mathbf{a}\times\mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k}\\ a_x & a_y & a_z\\ b_x & b_y & b_z \end{vmatrix}. \]

Expanding along the first row gives

\[ \begin{aligned} \mathbf{a}\times\mathbf{b} &= \mathbf{i} \begin{vmatrix} a_y & a_z\\ b_y & b_z \end{vmatrix} - \mathbf{j} \begin{vmatrix} a_x & a_z\\ b_x & b_z \end{vmatrix} + \mathbf{k} \begin{vmatrix} a_x & a_y\\ b_x & b_y \end{vmatrix}\\ &= \mathbf{i}(a_yb_z-a_zb_y) -\mathbf{j}(a_xb_z-a_zb_x) +\mathbf{k}(a_xb_y-a_yb_x)\\ &= \begin{pmatrix} a_yb_z-a_zb_y\\ a_zb_x-a_xb_z\\ a_xb_y-a_yb_x \end{pmatrix}. \end{aligned} \]

Each component is a signed 2D area. For example, the \(z\)-component

\[ a_xb_y-a_yb_x \]

is the signed area seen from the \(z\)-axis. The 3D cross product is therefore a coordinated collection of three projected 2D oriented areas.

Unit Normal Vector

If \(\mathbf{a}\times\mathbf{b}\neq\mathbf{0}\), the unit normal vector of the plane spanned by \(\mathbf{a}\) and \(\mathbf{b}\) is

\[ \hat{\mathbf{n}} := \frac{\mathbf{a}\times\mathbf{b}}{\|\mathbf{a}\times\mathbf{b}\|}. \]

Then the cross product can be written as

\[ \mathbf{a}\times\mathbf{b} = \underbrace{\hat{\mathbf{n}}}_{\text{direction}} \underbrace{\|\mathbf{a}\|\,\|\mathbf{b}\|\sin\theta}_{\text{area}}. \]

Special Cases

Unit Vectors

If both vectors have unit length \( \|\mathbf{a}\|=\|\mathbf{b}\|=1 \), then

\[ \|\mathbf{a}\times\mathbf{b}\| = \sin\theta. \]

The cross product has length \(1\) exactly when the normalized vectors are perpendicular, because \(\sin 90^\circ=1\).

Parallel Vectors

If \(\mathbf{a}\) and \(\mathbf{b}\) are parallel, then \(\theta=0\) or \(\theta=\pi\), so

\[ \sin\theta=0. \]

Hence

\[ \mathbf{a}\times\mathbf{b}=\mathbf{0}. \]

Geometrically, parallel vectors span a collapsed parallelogram with zero area.

Core Properties

Anticommutativity

The cross product is anticommutative:

\[ \mathbf{a}\times\mathbf{b} = -(\mathbf{b}\times\mathbf{a}) = (-\mathbf{b})\times\mathbf{a}. \]

This follows from orientation. The parallelogram spanned by \(\mathbf{a}\) and \(\mathbf{b}\) has the same area as the one spanned by \(\mathbf{b}\) and \(\mathbf{a}\), but the opposite orientation.

A direct consequence is

\[ \mathbf{a}\times\mathbf{a} = -(\mathbf{a}\times\mathbf{a}). \]

Therefore

\[ \mathbf{a}\times\mathbf{a}=\mathbf{0}. \]

Bilinearity

The cross product is linear in each argument. This means that it distributes over addition:

\[ \mathbf{a}\times(\mathbf{b}+\mathbf{c}) = \mathbf{a}\times\mathbf{b} + \mathbf{a}\times\mathbf{c}, \]

\[ (\mathbf{a}+\mathbf{b})\times\mathbf{c} = \mathbf{a}\times\mathbf{c} + \mathbf{b}\times\mathbf{c}. \]

Scalars can be moved in and out:

\[ \alpha(\mathbf{a}\times\mathbf{b}) = (\alpha\mathbf{a})\times\mathbf{b} = \mathbf{a}\times(\alpha\mathbf{b}). \]

Or more generally the scalar association holds:

\[ (\alpha\mathbf{a})\times(\beta\mathbf{b}) = \alpha\beta(\mathbf{a}\times\mathbf{b}). \]

Geometrically, scaling one side of a parallelogram scales its area by the same factor. Scaling both sides scales the area by the product of both factors.

Orthogonality

Since the cross product was derived from the dot-product conditions

\[ \mathbf{a}\cdot\mathbf{c}=0, \qquad \mathbf{b}\cdot\mathbf{c}=0, \]

it satisfies

\[ (\mathbf{a}\times\mathbf{b})\cdot\mathbf{a}=0, \qquad (\mathbf{a}\times\mathbf{b})\cdot\mathbf{b}=0. \]

This is the algebraic meaning of being perpendicular to the plane spanned by \(\mathbf{a}\) and \(\mathbf{b}\).

Zero Product

The cross product is zero exactly when the two vectors are linearly dependent, meaning they span a parallelogram of zero area. For nonzero vectors, this means they are collinear (parallel), so \(\theta=0\) or \(\theta=\pi\), and therefore \(\sin\theta=0\).

\[ \mathbf{a}\times\mathbf{b}=\mathbf{0} \quad\Longleftrightarrow\quad \mathbf{a}\text{ and }\mathbf{b}\text{ are linearly dependent}. \]

But note, the cross product with the zero vector is also zero:

\[ \mathbf{a}\times\mathbf{0} = \mathbf{0}\times\mathbf{a} = \mathbf{0}. \]

Not Associative

The cross product is not associative. In general,

\[ (\mathbf{a}\times\mathbf{b})\times\mathbf{c} \neq \mathbf{a}\times(\mathbf{b}\times\mathbf{c}). \]

This is important: once a cross product has been computed, the result is a new vector, and crossing that new vector with another vector changes the geometry of the expression.

An example using basis vectors makes this visible:

\[ \mathbf{i}\times(\mathbf{i}\times\mathbf{j}) = \mathbf{i}\times\mathbf{k} = -\mathbf{j}, \]

while

\[ (\mathbf{i}\times\mathbf{i})\times\mathbf{j} = \mathbf{0}\times\mathbf{j} = \mathbf{0}. \]

Scalar Triple Product

The scalar triple product combines one dot product and one cross product:

\[ [\mathbf{a},\mathbf{b},\mathbf{c}] := \mathbf{a}\cdot(\mathbf{b}\times\mathbf{c}). \]

The formula has a direct geometric interpretation: it measures the oriented volume of the parallelepiped determined by the three vectors.

The scalar triple product measures the signed volume of the parallelepiped spanned by \(\mathbf{a}\), \(\mathbf{b}\), and \(\mathbf{c}\).

In the figure, \(\mathbf{b}\) and \(\mathbf{c}\) span the base parallelogram with the cross product \(\mathbf{b}\times\mathbf{c}\) its oriented area vector so that its length is the base area:

\[ A = \|\mathbf{b}\times\mathbf{c}\|. \]

Let

\[ \hat{\mathbf n} = \frac{\mathbf{b}\times\mathbf{c}}{\|\mathbf{b}\times\mathbf{c}\|} \]

be the unit vector in the direction of \(\mathbf{b}\times\mathbf{c}\). Projecting \(\mathbf{a}\) onto this direction gives the signed height of the parallelepiped:

\[ h = \operatorname{proj}_{\hat{\mathbf n}}(\mathbf{a}) = \mathbf{a}\cdot \hat{\mathbf n}. \]

Therefore

\[ \text{signed volume} = \underbrace{\|\mathbf{b}\times\mathbf{c}\|}_{\text{base area}} \underbrace{(\mathbf{a}\cdot\hat{\mathbf n})}_{\text{signed height}}. \]

Substituting \(\hat{\mathbf n}\) gives

\[ \|\mathbf{b}\times\mathbf{c}\| \left( \mathbf{a}\cdot \frac{\mathbf{b}\times\mathbf{c}}{\|\mathbf{b}\times\mathbf{c}\|} \right) = \mathbf{a}\cdot(\mathbf{b}\times\mathbf{c}). \]

Hence the scalar triple product is exactly the signed volume:

\[ [\mathbf{a},\mathbf{b},\mathbf{c}] = \mathbf{a}\cdot(\mathbf{b}\times\mathbf{c}). \]

The ordinary, unsigned volume is therefore

\[ \boxed{ V = |\mathbf{a}\cdot(\mathbf{b}\times\mathbf{c})| }. \]

Equivalently, if \(\theta\) is the angle between \(\mathbf{a}\) and \(\mathbf{b}\times\mathbf{c}\), then

\[ V = \|\mathbf{a}\|\,\|\mathbf{b}\times\mathbf{c}\|\,|\cos\theta|. \]

If this volume is \(0\), then the three vectors are coplanar. In other words, they do not span a three-dimensional volume.

The same quantity can also be written as a determinant:

\[ [\mathbf{a},\mathbf{b},\mathbf{c}] = \det(\mathbf{a}\ \mathbf{b}\ \mathbf{c}), \]

where the vectors are used as the columns of the matrix.

Cyclic permutations preserve the oriented volume:

\[ \mathbf{a}\cdot(\mathbf{b}\times\mathbf{c}) = \mathbf{b}\cdot(\mathbf{c}\times\mathbf{a}) = \mathbf{c}\cdot(\mathbf{a}\times\mathbf{b}). \]

Swapping any two inputs reverses the orientation and flips the sign:

\[ [\mathbf{a},\mathbf{b},\mathbf{c}] = -[\mathbf{b},\mathbf{a},\mathbf{c}] = -[\mathbf{a},\mathbf{c},\mathbf{b}] = -[\mathbf{c},\mathbf{b},\mathbf{a}]. \]

If a tetrahedron is formed by the same edge vectors from one vertex, its signed volume is one sixth of the parallelepiped volume:

\[ V_{\text{tetrahedron,signed}} = \frac{1}{6}[\mathbf{a},\mathbf{b},\mathbf{c}]. \]

Its ordinary volume is

\[ \boxed{ V_{\text{tetrahedron}} = \frac{1}{6} |\mathbf{a}\cdot(\mathbf{b}\times\mathbf{c})| }. \]

Vector Triple Product

The vector triple product is a cross product involving another cross product:

\[ \mathbf{a}\times(\mathbf{b}\times\mathbf{c}). \]

The inner product \(\mathbf{b}\times\mathbf{c}\) is perpendicular to the plane of \(\mathbf{b}\) and \(\mathbf{c}\). When \(\mathbf{a}\) is crossed with that normal vector, the result comes back into the plane spanned by \(\mathbf{b}\) and \(\mathbf{c}\). Algebraically the right association is,

\[ \boxed{ \mathbf{a}\times(\mathbf{b}\times\mathbf{c}) = \mathbf{b}(\mathbf{a}\cdot\mathbf{c}) - \mathbf{c}(\mathbf{a}\cdot\mathbf{b}) }. \]

Since the result is a linear combination of \(\mathbf{b}\) and \(\mathbf{c}\), we immediately see that

\[ \mathbf{a}\times(\mathbf{b}\times\mathbf{c}) \in \operatorname{span}\{\mathbf{b},\mathbf{c}\}. \]

With the parentheses placed differently, we get a related left association identity:

\[ \boxed{ (\mathbf{a}\times\mathbf{b})\times\mathbf{c} = \mathbf{b}(\mathbf{a}\cdot\mathbf{c}) - \mathbf{a}(\mathbf{b}\cdot\mathbf{c}) }. \]

Now the result is a linear combination of \(\mathbf{a}\) and \(\mathbf{b}\), so

\[ (\mathbf{a}\times\mathbf{b})\times\mathbf{c} \in \operatorname{span}\{\mathbf{a},\mathbf{b}\}. \]

These identities are often called the Graßmann identities or remembered as the BAC-CAB rule.

A useful special case occurs when \(\mathbf{c}\) is perpendicular to both \(\mathbf{a}\) and \(\mathbf{b}\). Then

\[ \mathbf{a}\cdot\mathbf{c}=0, \qquad \mathbf{b}\cdot\mathbf{c}=0. \]

Therefore

\[ (\mathbf{a}\times\mathbf{b})\times\mathbf{c} = \mathbf{0}. \]

Jacobi Identity

Although the cross product is not associative, it satisfies the Jacobi identity, also called the Lie identity:

\[ \mathbf{a}\times(\mathbf{b}\times\mathbf{c}) + \mathbf{b}\times(\mathbf{c}\times\mathbf{a}) + \mathbf{c}\times(\mathbf{a}\times\mathbf{b}) = \mathbf{0}. \]

Intuitively, the three different ways of nesting the cross product do not vanish individually, but their cyclic sum balances out.

Lagrange Identity

The full Lagrange identity relates dot products and cross products:

\[ (\mathbf{a}\times\mathbf{b})\cdot(\mathbf{c}\times\mathbf{d}) = (\mathbf{a}\cdot\mathbf{c})(\mathbf{b}\cdot\mathbf{d}) - (\mathbf{a}\cdot\mathbf{d})(\mathbf{b}\cdot\mathbf{c}). \]

Setting \(\mathbf{c}:=\mathbf{a}\) and \(\mathbf{d}:=\mathbf{b}\) gives

\[ \|\mathbf{a}\times\mathbf{b}\|^2 = \|\mathbf{a}\|^2\|\mathbf{b}\|^2 - (\mathbf{a}\cdot\mathbf{b})^2. \]

For unit vectors \(\hat{\mathbf{a}}\) and \(\hat{\mathbf{b}}\), this becomes the Pythagorean identity in geometric form:

\[ \underbrace{\|\hat{\mathbf{a}}\times\hat{\mathbf{b}}\|^2}_{=\sin^2\theta} = 1 - \underbrace{(\hat{\mathbf{a}}\cdot\hat{\mathbf{b}})^2}_{=\cos^2\theta}. \]

So the dot product measures the parallel part of the relationship between two unit vectors, while the cross product measures the perpendicular area part.

Applications

Normal Vector of a Triangle

Suppose a triangle has vertices \(\mathbf{P}_1\), \(\mathbf{P}_2\), and \(\mathbf{P}_3\). Define two edge vectors

\[ \mathbf{a}:=\mathbf{P}_2-\mathbf{P}_1, \qquad \mathbf{b}:=\mathbf{P}_3-\mathbf{P}_1. \]

Then

\[ \mathbf{n}:=\mathbf{a}\times\mathbf{b} \]

is perpendicular to the triangle.

If \(\mathbf{n}\neq\mathbf{0}\), the corresponding unit normal is

\[ \hat{\mathbf{n}} := \frac{\mathbf{n}}{\|\mathbf{n}\|}. \]

The length of \(\mathbf{n}\) is the area of the parallelogram formed by the two triangle edges. The triangle is half of that parallelogram, so

\[ A_\triangle = \frac{1}{2}\|\mathbf{a}\times\mathbf{b}\|. \]

In computer graphics, the direction of the normal depends on vertex order. Swapping \(\mathbf{P}_2\) and \(\mathbf{P}_3\) changes

\[ (\mathbf{P}_2-\mathbf{P}_1)\times(\mathbf{P}_3-\mathbf{P}_1) \quad\text{into}\quad (\mathbf{P}_3-\mathbf{P}_1)\times(\mathbf{P}_2-\mathbf{P}_1), \]

which reverses the normal.

From Triangle Area to the Shoelace Formula

There is another beautiful way to write the oriented area vector of a triangle. Let \(\mathbf{P}_1\), \(\mathbf{P}_2\), and \(\mathbf{P}_3\) be the position vectors of the triangle's vertices. Define the two edge vectors

\[ \mathbf{a}:=\mathbf{P}_2-\mathbf{P}_1, \qquad \mathbf{b}:=\mathbf{P}_3-\mathbf{P}_1. \]

The usual unnormalized normal vector is then

\[ \mathbf{n} := \mathbf{a}\times\mathbf{b}. \]

Substituting the edge vectors gives

\[ \begin{aligned} \mathbf{a}\times\mathbf{b} &= (\mathbf{P}_2-\mathbf{P}_1)\times(\mathbf{P}_3-\mathbf{P}_1)\\ &= \mathbf{P}_2\times\mathbf{P}_3 -\mathbf{P}_2\times\mathbf{P}_1 -\mathbf{P}_1\times\mathbf{P}_3 +\mathbf{P}_1\times\mathbf{P}_1\\ &= \mathbf{P}_2\times\mathbf{P}_3 +\mathbf{P}_1\times\mathbf{P}_2 +\mathbf{P}_3\times\mathbf{P}_1\\ &= \mathbf{P}_1\times\mathbf{P}_2 + \mathbf{P}_2\times\mathbf{P}_3 + \mathbf{P}_3\times\mathbf{P}_1. \end{aligned} \]

Therefore the oriented area vector of the triangle is

\[ \mathbf{A}_{\triangle} := \frac12\mathbf{a}\times\mathbf{b} = \frac12 \left( \mathbf{P}_1\times\mathbf{P}_2 + \mathbf{P}_2\times\mathbf{P}_3 + \mathbf{P}_3\times\mathbf{P}_1 \right). \]

This vector contains both pieces of information at once:

\[ \mathbf{A}_{\triangle} = \underbrace{\hat{\mathbf{n}}}_{\text{orientation}} \underbrace{A_{\triangle}}_{\text{area}}. \]

Its direction is the oriented normal of the triangle, and its length is the triangle area.

The cyclic formula looks like it depends on the origin, because it uses the position vectors of the vertices. But it does not. The equivalent edge formula

\[ \frac12\mathbf{a}\times\mathbf{b} = \frac12(\mathbf{P}_2-\mathbf{P}_1)\times(\mathbf{P}_3-\mathbf{P}_1) \]

shows that translating all three points by the same vector leaves the area vector unchanged.

This cyclic form now extends from a triangle to a polygon. Let \(\mathbf{P}_1,\mathbf{P}_2,\ldots,\mathbf{P}_n\) be the ordered vertices of a planar polygon. We can decompose the polygon into oriented triangles by fixing the vertex \(\mathbf{P}_1\) and adding

\[ (\mathbf{P}_1,\mathbf{P}_2,\mathbf{P}_3), \quad (\mathbf{P}_1,\mathbf{P}_3,\mathbf{P}_4), \quad \ldots, \quad (\mathbf{P}_1,\mathbf{P}_{n-1},\mathbf{P}_n). \]

Using the cyclic triangle formula, their summed oriented area vector is

\[ \begin{aligned} \mathbf{A} &= \frac12 \sum_{i=2}^{n-1} \left( \mathbf{P}_1\times\mathbf{P}_i + \mathbf{P}_i\times\mathbf{P}_{i+1} + \mathbf{P}_{i+1}\times\mathbf{P}_1 \right). \end{aligned} \]

Written out, the terms involving the internal diagonals cancel in pairs:

\[ \begin{aligned} 2\mathbf{A} &= \mathbf{P}_1\times\mathbf{P}_2 + \mathbf{P}_2\times\mathbf{P}_3 + \mathbf{P}_3\times\mathbf{P}_1\\ &\quad+ \mathbf{P}_1\times\mathbf{P}_3 + \mathbf{P}_3\times\mathbf{P}_4 + \mathbf{P}_4\times\mathbf{P}_1\\ &\quad+ \cdots\\ &\quad+ \mathbf{P}_1\times\mathbf{P}_{n-1} + \mathbf{P}_{n-1}\times\mathbf{P}_n + \mathbf{P}_n\times\mathbf{P}_1. \end{aligned} \]

Since \(\mathbf{u}\times\mathbf{v}=-(\mathbf{v}\times\mathbf{u})\), we have for example \(\mathbf{P}_3\times\mathbf{P}_1+\mathbf{P}_1\times\mathbf{P}_3=\mathbf{0}\). The same cancellation happens for every internal diagonal. What remains is only the cyclic boundary sum:

\[ \mathbf{A} = \frac12 \left( \mathbf{P}_1\times\mathbf{P}_2 + \mathbf{P}_2\times\mathbf{P}_3 + \cdots + \mathbf{P}_n\times\mathbf{P}_1 \right). \]

Equivalently, if we set \(\mathbf{P}_{n+1}:=\mathbf{P}_1\), then

\[ \mathbf{A} := \frac12 \sum_{i=1}^{n} \mathbf{P}_i\times\mathbf{P}_{i+1}. \]

Each term \(\frac12\mathbf{P}_i\times\mathbf{P}_{i+1}\) is the oriented area vector of the triangle formed by the origin and the edge from \(\mathbf{P}_i\) to \(\mathbf{P}_{i+1}\). Although these individual triangles depend on the chosen origin, their cyclic sum does not.

If the polygon lies in the \(xy\)-plane, then each point has the form

\[ \mathbf{P}_i= \begin{pmatrix} x_i\\ y_i\\ 0 \end{pmatrix}. \]

Hence the cross product of two consecutive vertices points purely in the \(z\)-direction:

\[ \mathbf{P}_i\times\mathbf{P}_{i+1} = \begin{pmatrix} 0\\ 0\\ x_i y_{i+1}-y_i x_{i+1} \end{pmatrix}. \]

The \(x\)- and \(y\)-components vanish because all points lie in the \(xy\)-plane. What remains is the \(z\)-component, which is exactly the signed two-dimensional area contribution of the edge from \(\mathbf{P}_i\) to \(\mathbf{P}_{i+1}\).

This signed contribution is the 2D perp product. Using \(\perp\) as a binary operator, we define

\[ \mathbf{P}_i \perp \mathbf{P}_{i+1} := x_i y_{i+1}-y_i x_{i+1}. \]

Therefore the signed area is the \(z\)-component of the oriented area vector:

\[ A = \frac12 \sum_{i=1}^{n} (\mathbf{P}_i \perp \mathbf{P}_{i+1}), \qquad \mathbf{P}_{n+1}:=\mathbf{P}_1. \]

Written in coordinates, this is

\[ A = \frac12 \sum_{i=1}^{n} (x_i y_{i+1}-y_i x_{i+1}). \]

This is the shoelace formula. Written without orientation, the area is

\[ |A| = \frac12 \left| \sum_{i=1}^{n} (\mathbf{P}_i \perp \mathbf{P}_{i+1}) \right| = \frac12 \left| \sum_{i=1}^{n} (x_i y_{i+1}-y_i x_{i+1}) \right|. \]

So the shoelace formula is the two-dimensional shadow of the same cross-product idea: add the oriented origin-to-edge triangle contributions around the boundary. The origin-dependent parts cancel, leaving an origin-independent signed area.

Equation of a Plane Through Three Points

Given three non-collinear points \(\mathbf{P}_1\), \(\mathbf{P}_2\), and \(\mathbf{P}_3\), define

\[ \mathbf{v}_1:=\mathbf{P}_2-\mathbf{P}_1, \qquad \mathbf{v}_2:=\mathbf{P}_3-\mathbf{P}_1. \]

These two vectors lie in the plane. A normal vector is therefore

\[ \mathbf{n}:=\mathbf{v}_1\times\mathbf{v}_2. \]

A point \(\mathbf{P}=(x,y,z)^T\) lies in the plane exactly when \(\mathbf{v}_3:=\mathbf{P}-\mathbf{P}_1\) is perpendicular to \(\mathbf{n}\):

\[ \mathbf{v}_3\cdot\mathbf{n}=0. \]

Written as the plane equation, this is

\[ (x-\mathbf{P}_{1,x})n_x +(y-\mathbf{P}_{1,y})n_y +(z-\mathbf{P}_{1,z})n_z = 0. \]

The same condition can also be expressed using the scalar triple product:

\[ [\mathbf{v}_1,\mathbf{v}_2,\mathbf{v}_3]=0. \]

This says that the volume spanned by the two plane directions and the vector \(\mathbf{v}_3\) is zero. A zero volume means all three vectors lie in the same plane.

Normal Form and Coefficient Vector

The same geometry is captured by the normal-form equation

\[ \mathbf{n}\cdot\mathbf{x}=d, \]

where \(\mathbf{n}\neq\mathbf{0}\) is a normal vector of the plane. If two points \(\mathbf{P}\) and \(\mathbf{Q}\) lie in that plane, then

\[ \mathbf{n}\cdot\mathbf{P}=d, \qquad \mathbf{n}\cdot\mathbf{Q}=d, \]

so subtraction gives

\[ \mathbf{n}\cdot(\mathbf{Q}-\mathbf{P})=0. \]

Therefore \(\mathbf{n}\) is orthogonal to every direction vector in the plane. This is exactly what “normal vector” means.

A useful invariance: if \(k\neq 0\), then \(k\mathbf{n}\) defines the same plane after scaling the right side as well:

\[ \mathbf{n}\cdot\mathbf{x}=d \quad\Longleftrightarrow\quad (k\mathbf{n})\cdot\mathbf{x}=kd. \]

Be careful not to confuse direction vectors with point vectors: for a point \(\mathbf{P}\) in the plane we have \(\mathbf{n}\cdot\mathbf{P}=d\), not necessarily \(0\). Only planes through the origin satisfy \(d=0\).

Lines as Intersections of Two Planes

In \(\mathbb{R}^3\), one linear equation gives a plane, not a line. A line is obtained as the intersection of two planes:

\[ \mathbf{n}_1\cdot\mathbf{x}=h, \qquad \mathbf{n}_2\cdot\mathbf{x}=k. \]

When the planes are not parallel and not identical, their intersection is a line. Its direction vector is orthogonal to both normals and is therefore given by

\[ \mathbf{d}=\mathbf{n}_1\times\mathbf{n}_2. \]

This is another direct geometric role of the cross product: it converts two plane normals into the direction of the common intersection line.

Dihedral Angles from Normal Vectors

Let two planes intersect in a line. Their dihedral angle is measured in any plane that is perpendicular to that intersection line. This produces two supplementary angles.

The same angle information is contained in the two plane normals \(\mathbf{n}_1\) and \(\mathbf{n}_2\): the angle between the normals equals the dihedral angle up to the supplementary choice.

Therefore the (unsigned) dihedral angle can be computed with the dot-product cosine formula:

\[ \cos\varphi = \frac{|\mathbf{n}_1\cdot\mathbf{n}_2|}{\|\mathbf{n}_1\|\,\|\mathbf{n}_2\|}. \]

Without the absolute value, the same formula gives the oriented angle between the two normal directions.

Distance Between Two Lines

Let two lines in space be given by

\[ \ell_1(t):=\mathbf{P}_1+t\mathbf{v}_1, \qquad \ell_2(s):=\mathbf{P}_2+s\mathbf{v}_2. \]

Define the vector from the first line's base point to the second line's base point:

\[ \mathbf{r}:=\mathbf{P}_2-\mathbf{P}_1. \]

If the direction vectors are parallel, then

\[ \mathbf{v}_1\times\mathbf{v}_2=\mathbf{0}. \]

In that case the distance between the lines is the distance from \(\mathbf{P}_2\) to the first line:

\[ d = \frac{\|\mathbf{r}\times\mathbf{v}_1\|}{\|\mathbf{v}_1\|}. \]

This formula is again area divided by base length: \(\|\mathbf{r}\times\mathbf{v}_1\|\) is the area of the parallelogram, and dividing by \(\|\mathbf{v}_1\|\) leaves the height.

If the direction vectors are not parallel, define

\[ \mathbf{n}:=\mathbf{v}_1\times\mathbf{v}_2. \]

This vector is perpendicular to both lines. The shortest connection between two skew lines must point along this common normal direction. Therefore the distance is the absolute projection of \(\mathbf{r}\) onto \(\mathbf{n}\):

\[ d = \frac{|\mathbf{r}\cdot\mathbf{n}|}{\|\mathbf{n}\|}. \]

If this value is \(0\), the non-parallel lines intersect. If it is positive, the lines are skew.

Testing Whether Two Vectors Are Parallel

Two vectors are parallel exactly when the parallelogram they span has zero area. Therefore

\[ \mathbf{a}\parallel\mathbf{b} \quad\Longleftrightarrow\quad \mathbf{a}\times\mathbf{b}=\mathbf{0}. \]

The theoretical test is therefore

\[ \|\mathbf{a}\times\mathbf{b}\|=0. \]

Numerically, however, it is better to avoid the square root and test the squared length instead:

\[ \|\mathbf{a}\times\mathbf{b}\|^2 = (\mathbf{a}\times\mathbf{b})\cdot(\mathbf{a}\times\mathbf{b}) \approx 0. \]

In floating-point code, never test against exact zero. Use a tolerance such as \(\|\mathbf{a}\times\mathbf{b}\|^2 \le \varepsilon^2\|\mathbf{a}\|^2\|\mathbf{b}\|^2\) with an application-dependent \(\varepsilon\).

So after computing the cross product, the remaining test is just a dot product of the result with itself.

This is a robust and direct geometric test in 3D. Using only the dot product, one would have to test

\[ (\mathbf{a}\cdot\mathbf{b})^2 = \|\mathbf{a}\|^2\|\mathbf{b}\|^2, \]

which requires computing the dot product and both squared norms. The cross-product test directly measures the squared area of the parallelogram.

Torque (Moment of Force)

In physics, the same cross-product geometry appears in torque. If a force \(\mathbf{F}\) acts at position \(\mathbf{r}\) (relative to a reference point), the torque is

\[ \boldsymbol{\tau}:=\mathbf{r}\times\mathbf{F}. \]

Its direction gives the rotation axis (right-hand rule), and its magnitude is

\[ \|\boldsymbol{\tau}\| = \|\mathbf{r}\times\mathbf{F}\| = \|\mathbf{r}\|\,\|\mathbf{F}\|\sin\theta, \]

where \(\theta\) is the angle between \(\mathbf{r}\) and \(\mathbf{F}\). Only the component of force perpendicular to the lever arm contributes to rotation.

In practice this is often written in two equivalent forms:

\[ \|\boldsymbol{\tau}\| = \|\mathbf{r}\|\,\|\mathbf{F}_\perp\| = r_\perp\,\|\mathbf{F}\|, \]

where \(\mathbf{F}_\perp\) is the tangential (rotation-causing) component of the force and \(r_\perp\) is the shortest distance from the rotation axis to the force line of action (moment arm). This is exactly the same sine factor in geometric form.

Sign convention matters: in 2D mechanics one often uses the scalar \(\tau_z=(\mathbf{r}\times\mathbf{F})_z=xF_y-yF_x\). Positive and negative values indicate opposite rotation directions.

Example: A bicycle pedal is pushed with \(60\,\mathrm{N}\), the crank arm has length \(0.18\,\mathrm{m}\), and the angle is \(80^\circ\). Then

\[ \|\boldsymbol{\tau}\| = (0.18\,\mathrm{m})(60\,\mathrm{N})\sin(80^\circ) \approx 10.6359\,\mathrm{N\,m}. \]

Rigid-Body Kinematics: Angular to Linear Velocity

For a rigid body rotating about a reference point \(O\), let \(\mathbf{r}=\overrightarrow{OA}\) be the position vector of a point \(A\), and let \(\boldsymbol{\omega}\) be the angular velocity vector (axis by right-hand rule, magnitude in rad/s). The linear velocity of \(A\) is

\[ \boxed{\mathbf{v}_A=\boldsymbol{\omega}\times\mathbf{r}}. \]

Hence \(\mathbf{v}_A\) is perpendicular to both \(\boldsymbol{\omega}\) and \(\mathbf{r}\), and \[ \|\mathbf{v}_A\|=\|\boldsymbol{\omega}\|\,\|\mathbf{r}\|\sin\theta, \] where \(\theta\) is the angle between \(\boldsymbol{\omega}\) and \(\mathbf{r}\). If \(\mathbf{r}\perp\boldsymbol{\omega}\), this reduces to \(\|\mathbf{v}_A\|=\omega r\).

In the standard xy-plane example (rotation about the z-axis), with \[ \boldsymbol{\omega}=\begin{bmatrix}0\\0\\\omega\end{bmatrix}, \qquad \mathbf{r}=\begin{bmatrix}x\\y\\0\end{bmatrix}, \] we get \[ \mathbf{v} = \boldsymbol{\omega}\times\mathbf{r} = \begin{bmatrix}-\omega y\\\omega x\\0\end{bmatrix}, \qquad \mathbf{r}\cdot\mathbf{v}=0. \]

Recovering Angular Velocity from a Point Velocity

If \(\mathbf{v}=\boldsymbol{\omega}\times\mathbf{r}\) is known for a point with \(\mathbf{r}=\overrightarrow{OA}\), then crossing both sides with \(\mathbf{r}\) gives

\[ \mathbf{r}\times\mathbf{v} = \mathbf{r}\times(\boldsymbol{\omega}\times\mathbf{r}). \]

Using the vector triple product identity \( \mathbf{a}\times(\mathbf{b}\times\mathbf{c})= \mathbf{b}(\mathbf{a}\cdot\mathbf{c})-\mathbf{c}(\mathbf{a}\cdot\mathbf{b}) \), \[ \mathbf{r}\times(\boldsymbol{\omega}\times\mathbf{r}) = \boldsymbol{\omega}\,\|\mathbf{r}\|^2 - \mathbf{r}(\mathbf{r}\cdot\boldsymbol{\omega}). \]

If the rotation axis is perpendicular to \(\mathbf{r}\), i.e. \(\mathbf{r}\cdot\boldsymbol{\omega}=0\), this simplifies to \[ \boxed{\boldsymbol{\omega}=\frac{\mathbf{r}\times\mathbf{v}}{\|\mathbf{r}\|^2}}. \]

Important limitation: from the velocity of a single point, only the component of \(\boldsymbol{\omega}\) perpendicular to \(\mathbf{r}\) is observable. Any component parallel to \(\mathbf{r}\) vanishes in \(\boldsymbol{\omega}_{\parallel}\times\mathbf{r}=\mathbf{0}\).

Lever-arm sketch: only the force component perpendicular to the lever contributes to torque.

Common Pitfalls

Connections

The geometric setup from vectors and the orthogonality criterion from dot products are the two ingredients used repeatedly throughout the discussion.

References