Principal Angles Between Planes
Compare two planes through the origin and see why their principal angles ignore the signs of their normals.
By Riano · Published · Updated · Report a correction
Principal Angles Between Planes
Concept Overview
The principal angles between two subspaces generalize the concept of an angle between two vectors. For two 2D subspaces (planes) in ℝ3, there are two principal angles. If the planes are defined as the orthogonal complements of nonzero normal vectors u and v, the principal angles describe their geometric relationship.
Two distinct planes in ℝ3 always intersect in at least a 1D subspace (a line). Since this line belongs to both planes, the first principal angle is always 0°. The second principal angle captures the maximum "separation" between the planes and is equal to the angle between their normal vectors. Since subspaces are unoriented, the sign of the normal vectors does not affect the planes themselves, meaning the principal angle must ignore the sign and is determined by acos(|u·v| / (||u|| ||v||)).
Worked Example
Let's find the principal angles between two planes defined by their normal vectors u = (1, 2, 2) and v = (2, 1, 2).
- Calculate the norms:
||u||2 = 12 + 22 + 22 = 1 + 4 + 4 = 9. Thus, ||u|| = 3.
||v||2 = 22 + 12 + 22 = 4 + 1 + 4 = 9. Thus, ||v|| = 3. - Calculate the dot product:
u · v = (1)(2) + (2)(1) + (2)(2) = 2 + 2 + 4 = 8. - Find the intersection dimension and first angle:
Since the normal vectors are not parallel (their cross product is (2, 2, -3)), the planes intersect in a line (dimension 1). Because they share this line, the first principal angle is 0°. - Calculate the nontrivial cosine and second angle:
The nontrivial cosine is |u · v| / (||u|| ||v||) = |8| / (3 * 3) = 8/9 ≈ 0.888888888889.
The second principal angle is acos(8/9), which is approximately 27.266044450733°. Notice how changing the sign of u or v would not change the planes, hence the absolute value on the dot product.
Interactive Experiment
Open the interactive module to visualize the planes and their normal vectors.
- Adjust the sliders for Normal u1, Normal u2, and Normal u3 to define the normal vector of the first plane.
- Adjust the sliders for Normal v1, Normal v2, and Normal v3 to define the normal vector of the second plane.
- Observe the calculated Principal Angles, Intersection Dim, and Nontrivial Cosine in the Results panel.
Limitations
This interactive module focuses on 2D subspaces (planes) within ℝ3. The concept of principal angles extends to general finite-dimensional subspaces (e.g., via Singular Value Decomposition), but this implementation is limited to the intuitive 3D geometric case. Furthermore, zero normal vectors are explicitly unsupported because they do not define a valid plane.
References
The mathematical formulation implemented here relies on standard subspace concepts.
- SciPy Documentation: scipy.linalg.subspace_angles- Official linear-algebra manual discussing the formulation and computation of principal angles.
Experience it interactively
Adjust parameters, observe in real time, and build deep intuition with Riano’s interactive Principal Angles Between Planes module.
Try Principal Angles Between Planes on Riano →