The three possible line-sphere intersections:
1. No intersection.
2. Point intersection.
3. Two point intersection.
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
: points on the sphere
: center point
: radius of the sphere
Equation for a line starting at
: points on the line
: origin of the line
: distance from the origin of the line
: 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
, involving the dot product of vectors:
- Equations combined
![{\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}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b8770ffcdc0f940ccb6b4803f7b9467f5996edee)
- Expanded and rearranged:
![{\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}](https://wikimedia.org/api/rest_v1/media/math/render/svg/63f56f594183c77e637ac6a02272408f56288ca0)
- The form of a quadratic formula is now observable. (This quadratic equation is an instance of Joachimsthal's equation.[2])
![{\displaystyle ad^{2}+bd+c=0}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a503fe82745981bcaf57b7ba75004899aa14cafb)
- where
![{\displaystyle a=\mathbf {u} \cdot \mathbf {u} =\left\Vert \mathbf {u} \right\Vert ^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2d7c7075b5611c2053f3e79a88c25130be04e488)
![{\displaystyle b=2[\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} )]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1d92287b4c21fb5829a729083d709e52a9d5b205)
![{\displaystyle c=(\mathbf {o} -\mathbf {c} )\cdot (\mathbf {o} -\mathbf {c} )-r^{2}=\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a6968796208c141c0cd1b1a4e23bc3e8e7b00896)
- Simplified
![{\displaystyle 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}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9d748337376e0a0e4d6e969b1effa417430f5c31)
- Note that in the specific case where
is a unit vector, and thus
, we can simplify this further to (writing
instead of
to indicate a unit vector):
![{\displaystyle \nabla =[{\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} )]^{2}-(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a592c28c9ce24edcc97e73a3965633adcee38025)
![{\displaystyle d=-[{\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} )]\pm {\sqrt {\nabla }}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7480cf22d28504097ca4a193c0f7010082b34735)
- If
, then it is clear that no solutions exist, i.e. the line does not intersect the sphere (case 1).
- If
, then exactly one solution exists, i.e. the line just touches the sphere in one point (case 2).
- If
, two solutions exist, and thus the line touches the sphere in two points (case 3).
See also
References