(Redirected from Line–circle 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
Intersection in exactly one point
Intersection in 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 {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}
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\pm {\sqrt {(2)^{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 =^{2}-(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})}
d
=
−
[
u
^
⋅
(
o
−
c
)
]
±
∇
{\displaystyle d=-\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
References
Eberly, David H. (2006). 3D game engine design: a practical approach to real-time computer graphics, 2nd edition . Morgan Kaufmann. p. 698. ISBN 0-12-229063-1 .
"Joachimsthal's Equation" .
Categories :
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.
**DISCLAIMER** We are not affiliated with Wikipedia, and Cloudflare.
The information presented on this site is for general informational purposes only and does not constitute medical advice.
You should always have a personal consultation with a healthcare professional before making changes to your diet, medication, or exercise routine.
AI helps with the correspondence in our chat.
We participate in an affiliate program. If you buy something through a link, we may earn a commission 💕
↑