Line–sphere intersection
In-game article clicks load inline without leaving the challenge.

In analytic geometry, a line and a sphere can intersect in three ways:
- no intersection at all,
- intersection at exactly one point, and
- intersection at 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.
Calculation using vectors in 3D
In vector notation, the equations are as follows:
Equation for a sphere
‖ x − c ‖ 2 = r 2 {\displaystyle \left\Vert \mathbf {x} -\mathbf {c} \right\Vert ^{2}=r^{2}} x {\displaystyle \mathbf {x} } : points on the sphere c {\displaystyle \mathbf {c} } : center point r {\displaystyle r} : radius of the sphere
Equation for a line starting at o {\displaystyle \mathbf {o} }
x = o + d u {\displaystyle \mathbf {x} =\mathbf {o} +d\mathbf {u} } x {\displaystyle \mathbf {x} } : points on the line o {\displaystyle \mathbf {o} } : origin of the line d {\displaystyle d} : distance from the origin of the line u {\displaystyle \mathbf {u} } : 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 d {\displaystyle d}, involving the dot product of vectors:
Equations combined ‖ o + d u − c ‖ 2 = r 2 ⇔ ( o + d u − c ) ⋅ ( o + d u − c ) = r 2 {\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}}
Expanded and rearranged: d 2 ( u ⋅ u ) + 2 d [ u ⋅ ( o − c ) ] + ( o − c ) ⋅ ( o − c ) − r 2 = 0 {\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}
The form of a quadratic formula is now observable. (This quadratic equation is an instance of Joachimsthal's equation.) a d 2 + b d + c = 0 {\displaystyle ad^{2}+bd+c=0}
where a = u ⋅ u = ‖ u ‖ 2 {\displaystyle a=\mathbf {u} \cdot \mathbf {u} =\left\Vert \mathbf {u} \right\Vert ^{2}} b = 2 [ u ⋅ ( o − c ) ] {\displaystyle b=2[\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} )]} c = ( o − c ) ⋅ ( o − c ) − r 2 = ‖ o − c ‖ 2 − r 2 {\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 d = − 2 [ u ⋅ ( o − c ) ] ± ( 2 [ u ⋅ ( o − c ) ] ) 2 − 4 ‖ u ‖ 2 ( ‖ o − c ‖ 2 − r 2 ) 2 ‖ u ‖ 2 {\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}}}}
Note that in the specific case where u {\displaystyle \mathbf {u} } is a unit vector, and thus ‖ u ‖ 2 = 1 {\displaystyle \left\Vert \mathbf {u} \right\Vert ^{2}=1}, we can simplify this further to (writing u ^ {\displaystyle {\hat {\mathbf {u} }}} instead of u {\displaystyle \mathbf {u} } to indicate a unit vector): ∇ = [ u ^ ⋅ ( o − c ) ] 2 − ( ‖ o − c ‖ 2 − r 2 ) {\displaystyle \nabla =[{\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} )]^{2}-(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})} d = − [ u ^ ⋅ ( o − c ) ] ± ∇ {\displaystyle d=-[{\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} )]\pm {\sqrt {\nabla }}}
If ∇ < 0 {\displaystyle \nabla <0}, then it is clear that no solutions exist, i.e. the line does not intersect the sphere (case 1). If ∇ = 0 {\displaystyle \nabla =0}, then exactly one solution exists, i.e. the line just touches the sphere in one point (case 2). If ∇ > 0 {\displaystyle \nabla >0}, two solutions exist, and thus the line touches the sphere in two points (case 3).
See also
- Intersection (geometry) § A line and a circle
- Analytic geometry
- Line–plane intersection
- Plane–plane intersection
- Plane–sphere intersection