Line–sphere intersection
From HandWiki
In analytic geometry, a line and a sphere can intersect in three ways:
- No intersection at all
- Intersection in exactly one point
- Intersection in two points.
Methods for distinguishing these cases, and determining the coordinates for the points in the latter cases, are useful in a number of circumstances. For example, it is a common calculation to perform during ray tracing.[1]
Calculation using vectors in 3D
In vector notation, the equations are as follows:
Equation for a sphere
- [math]\displaystyle{ \left\Vert \mathbf{x} - \mathbf{c} \right\Vert^2=r^2 }[/math]
- [math]\displaystyle{ \mathbf{x} }[/math] : points on the sphere
- [math]\displaystyle{ \mathbf{c} }[/math] : center point
- [math]\displaystyle{ r }[/math] : radius of the sphere
Equation for a line starting at [math]\displaystyle{ \mathbf{o} }[/math]
- [math]\displaystyle{ \mathbf{x}=\mathbf{o} + d\mathbf{u} }[/math]
- [math]\displaystyle{ \mathbf{x} }[/math] : points on the line
- [math]\displaystyle{ \mathbf{o} }[/math] : origin of the line
- [math]\displaystyle{ d }[/math] : distance from the origin of the line
- [math]\displaystyle{ \mathbf{u} }[/math] : direction of line (a non-zero vector)
Searching for points that are on the line and on the sphere means combining the equations and solving for [math]\displaystyle{ d }[/math], involving the dot product of vectors:
- Equations combined
- [math]\displaystyle{ \left\Vert \mathbf{o} + d\mathbf{u} - \mathbf{c} \right\Vert^2=r^2 \Leftrightarrow (\mathbf{o} + d\mathbf{u} - \mathbf{c}) \cdot (\mathbf{o} + d\mathbf{u} - \mathbf{c}) = r^2 }[/math]
- Expanded and rearranged:
- [math]\displaystyle{ d^2(\mathbf{u}\cdot\mathbf{u})+2d[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})]+(\mathbf{o}-\mathbf{c})\cdot(\mathbf{o}-\mathbf{c})-r^2=0 }[/math]
- The form of a quadratic formula is now observable. (This quadratic equation is an instance of Joachimsthal's equation.[2])
- [math]\displaystyle{ a d^2 + b d + c = 0 }[/math]
- where
- [math]\displaystyle{ a=\mathbf{u}\cdot\mathbf{u}=\left\Vert\mathbf{u}\right\Vert^2 }[/math]
- [math]\displaystyle{ b=2[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})] }[/math]
- [math]\displaystyle{ c=(\mathbf{o}-\mathbf{c})\cdot(\mathbf{o}-\mathbf{c})-r^2=\left\Vert\mathbf{o}-\mathbf{c}\right\Vert^2-r^2 }[/math]
- Simplified
- [math]\displaystyle{ \begin{alignat}{1} d &= \frac{-2[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})] \pm \sqrt{(2[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})])^2-4\left\Vert\mathbf{u}\right\Vert^2(\left\Vert\mathbf{o}-\mathbf{c}\right\Vert^2-r^2)}}{2 \left\Vert\mathbf{u}\right\Vert^2 }\\ & = \frac{-[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})] \pm \sqrt{(\mathbf{u}\cdot(\mathbf{o}-\mathbf{c}))^2-\left\Vert\mathbf{u}\right\Vert^2(\left\Vert\mathbf{o}-\mathbf{c}\right\Vert^2-r^2)}}{ \left\Vert\mathbf{u}\right\Vert^2}\end{alignat} }[/math]
- Note that in the specific case where [math]\displaystyle{ \mathbf{u} }[/math] is a unit vector, and thus [math]\displaystyle{ \left\Vert\mathbf{u}\right\Vert^2=1 }[/math], we can simplify this further to (writing [math]\displaystyle{ \hat{\mathbf{u}} }[/math] instead of [math]\displaystyle{ \mathbf{u} }[/math] to indicate a unit vector):
- [math]\displaystyle{ \nabla=[\hat{\mathbf{u}}\cdot(\mathbf{o}-\mathbf{c})]^2-(\left\Vert\mathbf{o}-\mathbf{c}\right\Vert^2-r^2) }[/math]
- [math]\displaystyle{ d=-[\hat{\mathbf{u}}\cdot(\mathbf{o}-\mathbf{c})] \pm \sqrt{\nabla} }[/math]
- If [math]\displaystyle{ \nabla \lt 0 }[/math], then it is clear that no solutions exist, i.e. the line does not intersect the sphere (case 1).
- If [math]\displaystyle{ \nabla = 0 }[/math], then exactly one solution exists, i.e. the line just touches the sphere in one point (case 2).
- If [math]\displaystyle{ \nabla \gt 0 }[/math], two solutions exist, and thus the line touches the sphere in two points (case 3).
See also
- Intersection (geometry)
- Analytic geometry
- Line–plane intersection
- Plane–plane intersection
- Plane–sphere intersection
References
- ↑ Eberly, David H. (2006). 3D game engine design: a practical approach to real-time computer graphics, 2nd edition. Morgan Kaufmann.. p. 698. ISBN 0-12-229063-1.
- ↑ "Joachimsthal's Equation". http://mathworld.wolfram.com/JoachimsthalsEquation.html.
Original source: https://en.wikipedia.org/wiki/Line–sphere intersection.
Read more |