From Wikipedia, the free encyclopedia
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
‖
x
−
c
‖
2
=
r
2
{\displaystyle \left\Vert \mathbf {x} -\mathbf {c} \right\Vert ^{2}=r^{2}}
c
{\displaystyle \mathbf {c} }
- center point
r
{\displaystyle r}
- radius
x
{\displaystyle \mathbf {x} }
- points on the sphere
Equation for a line starting at
o
{\displaystyle \mathbf {o} }
x
=
o
+
d
u
{\displaystyle \mathbf {x} =\mathbf {o} +d\mathbf {u} }
d
{\displaystyle d}
- distance along line from starting point
u
{\displaystyle \mathbf {u} }
- direction of line (a unit vector )
o
{\displaystyle \mathbf {o} }
- origin of the line
x
{\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
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
d
2
(
u
⋅
u
)
+
2
d
(
u
⋅
(
o
−
c
)
)
+
(
o
−
c
)
⋅
(
o
−
c
)
=
r
2
{\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}}
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.[ 1] )
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
u
{\displaystyle \mathbf {u} }
is a unit vector, and thus
‖
u
‖
2
=
1
{\displaystyle \left\Vert \mathbf {u} \right\Vert ^{2}=1}
. Thus, we can simplify this further to
d
=
−
(
u
⋅
(
o
−
c
)
)
±
∇
{\displaystyle d=-(\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} ))\pm {\sqrt {\nabla }}}
∇
=
(
u
⋅
(
o
−
c
)
)
2
−
(
‖
o
−
c
‖
2
−
r
2
)
{\displaystyle \nabla =(\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} ))^{2}-(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})}
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
References
David H. Eberly (2006), 3D game engine design: a practical approach to real-time computer graphics , 2nd edition, Morgan Kaufmann. ISBN 0-12-229063-1