Line–sphere intersection

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, at exactly one point, or in two points. Methods for distinguishing these cases, and determining equations for the points in the latter cases, are useful in a number of circumstances. For example, this is a common calculation to perform during ray tracing (Eberly 2006:698).

Calculation using vectors in 3D

In vector notation, the equations are as follows:

Equation for a sphere

${\displaystyle \left\Vert \mathbf {x} -\mathbf {c} \right\Vert ^{2}=r^{2}}$
• ${\displaystyle \mathbf {c} }$ - center point
• ${\displaystyle r}$ - radius
• ${\displaystyle \mathbf {x} }$ - points on the sphere

Equation for a line starting at ${\displaystyle \mathbf {o} }$

${\displaystyle \mathbf {x} =\mathbf {o} +d\mathbf {l} }$
• ${\displaystyle d}$ - distance along line from starting point
• ${\displaystyle \mathbf {l} }$ - direction of line (a unit vector)
• ${\displaystyle \mathbf {o} }$ - origin of the line
• ${\displaystyle \mathbf {x} }$ - points on the line

Searching for points that are on the line and on the sphere means combining the equations and solving for ${\displaystyle d}$:

Equations combined
${\displaystyle \left\Vert \mathbf {o} +d\mathbf {l} -\mathbf {c} \right\Vert ^{2}=r^{2}\Leftrightarrow (\mathbf {o} +d\mathbf {l} -\mathbf {c} )\cdot (\mathbf {o} +d\mathbf {l} -\mathbf {c} )=r^{2}}$
Expanded
${\displaystyle d^{2}(\mathbf {l} \cdot \mathbf {l} )+2d(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))+(\mathbf {o} -\mathbf {c} )\cdot (\mathbf {o} -\mathbf {c} )=r^{2}}$
Rearranged
${\displaystyle d^{2}(\mathbf {l} \cdot \mathbf {l} )+2d(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))+(\mathbf {o} -\mathbf {c} )\cdot (\mathbf {o} -\mathbf {c} )-r^{2}=0}$
The form of a quadratic formula is now observable. (This quadratic equation is an example of Joachimsthal's Equation [1].)
${\displaystyle ad^{2}+bd+c=0}$
where
• ${\displaystyle a=\mathbf {l} \cdot \mathbf {l} =\left\Vert \mathbf {l} \right\Vert ^{2}}$
• ${\displaystyle b=2(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))}$
• ${\displaystyle c=(\mathbf {o} -\mathbf {c} )\cdot (\mathbf {o} -\mathbf {c} )-r^{2}=\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2}}$
Simplified
${\displaystyle d={\frac {-(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))\pm {\sqrt {(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))^{2}-\left\Vert \mathbf {l} \right\Vert ^{2}(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})}}}{\left\Vert \mathbf {l} \right\Vert ^{2}}}}$
Note that ${\displaystyle \mathbf {l} }$ is a unit vector, and thus ${\displaystyle \left\Vert \mathbf {l} \right\Vert ^{2}=1}$. Thus, we can simplify this further to
${\displaystyle d=-(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))\pm {\sqrt {(\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))^{2}-\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}+r^{2}}}}$
• If the value under the square-root (${\displaystyle (\mathbf {l} \cdot (\mathbf {o} -\mathbf {c} ))^{2}-\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}+r^{2}}$) is less than zero, then it is clear that no solutions exist, i.e. the line does not intersect the sphere (case 1).
• If it is zero, then exactly one solution exists, i.e. the line just touches the sphere in one point (case 2).
• If it is greater than zero, two solutions exist, and thus the line touches the sphere in two points (case 3).