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
… excerpt ends here. Continue reading the full article.


