{{Short description|Geometrical problem}} thumb|350px|right|The three possible line-sphere intersections:<br> 1. no intersection<br> 2. single-point intersection<br> 3. two-point intersection
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.<ref>{{cite book|last1=Eberly|first=David H.|title=3D game engine design: a practical approach to real-time computer graphics, 2nd edition|date=2006|publisher=Morgan Kaufmann.|isbn=0-12-229063-1|page=698}}</ref>
== Calculation using vectors in 3D == In vector notation, the equations are as follows:
Equation for a sphere :<math>\left\Vert \mathbf{x} - \mathbf{c} \right\Vert^2=r^2</math> :*<math>\mathbf{x}</math> : points on the sphere :*<math>\mathbf{c}</math> : center point :*<math>r</math> : radius of the sphere
Equation for a line starting at <math>\mathbf{o}</math> :<math>\mathbf{x}=\mathbf{o} + d\mathbf{u}</math> :*<math>\mathbf{x}</math> : points on the line :*<math>\mathbf{o}</math> : origin of the line :*<math>d</math> : distance from the origin of the line :*<math>\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>d</math>, involving the dot product of vectors:
:Equations combined ::<math>\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>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.<ref>{{cite web | url=http://mathworld.wolfram.com/JoachimsthalsEquation.html | title=Joachimsthal's Equation }}</ref>) ::<math>a d^2 + b d + c = 0</math> :where :*<math>a=\mathbf{u}\cdot\mathbf{u}=\left\Vert\mathbf{u}\right\Vert^2</math> :*<math>b=2[\mathbf{u}\cdot(\mathbf{o}-\mathbf{c})]</math> :*<math>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> 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 }</math> :Note that in the specific case where <math>\mathbf{u}</math> is a unit vector, and thus <math>\left\Vert\mathbf{u}\right\Vert^2=1</math>, we can simplify this further to (writing <math>\hat{\mathbf{u}}</math> instead of <math>\mathbf{u}</math> to indicate a unit vector): ::<math>\nabla=[\hat{\mathbf{u}}\cdot(\mathbf{o}-\mathbf{c})]^2-(\left\Vert\mathbf{o}-\mathbf{c}\right\Vert^2-r^2)</math> ::<math>d=-[\hat{\mathbf{u}}\cdot(\mathbf{o}-\mathbf{c})] \pm \sqrt{\nabla}</math>
:*If <math>\nabla < 0</math>, then it is clear that no solutions exist, i.e. the line does not intersect the sphere (case 1). :*If <math>\nabla = 0</math>, then exactly one solution exists, i.e. the line just touches the sphere in one point (case 2). :*If <math>\nabla > 0</math>, two solutions exist, and thus the line touches the sphere in two points (case 3).
==See also== *{{Section link|Intersection_(geometry)#A_line_and_a_circle}} *Analytic geometry *Line–plane intersection *Plane–plane intersection *Plane–sphere intersection
== References == {{Reflist}}
{{DEFAULTSORT:Line-sphere intersection}} Category:Analytic geometry Category:Geometric algorithms Category:Geometric intersection Category:Spherical geometry