Los tres posibles casos de intersección entre una recta y una esfera.
En geometría analítica , la intersección entre una recta y una esfera puede resultar en uno de tres casos:
No hay intersección
Hay intersección en un punto
Hay intersección en dos puntos
En el segundo caso, la recta es tangente a la esfera.
Existen varias circunstancias en las que es necesario distinguir entre estos tres casos y, en los últimos dos, calcular las coordenadas de los puntos de intersección. Por ejemplo, es común realizar este cálculo en el trazado de rayos .[ 1]
Si bien este artículo trata sobre la intersección entre una recta y una esfera en tres dimensiones, las ecuaciones que se muestran a continuación son válidas en cualquier número de dimensiones porque están escritas en forma vectorial.
La ecuación de una esfera es:
‖
x
−
c
‖
2
=
r
2
{\displaystyle \left\Vert \mathbf {x} -\mathbf {c} \right\Vert ^{2}=r^{2}}
x
{\displaystyle \mathbf {x} }
: puntos en la superficie de la esfera
c
{\displaystyle \mathbf {c} }
: centro de la esfera
r
{\displaystyle r}
: radio de la esfera
La ecuación de una línea recta es:
x
=
o
+
d
u
{\displaystyle \mathbf {x} =\mathbf {o} +d\mathbf {u} }
x
{\displaystyle \mathbf {x} }
: puntos de la recta
o
{\displaystyle \mathbf {o} }
: un punto de paso de la recta
d
{\displaystyle d}
: distancia entre
o
{\displaystyle \mathbf {o} }
y
x
{\displaystyle \mathbf {x} }
u
{\displaystyle \mathbf {u} }
: un vector director de la recta
Para encontrar los puntos que están tanto en la recta como en la esfera hay que combinar las dos ecuaciones y despejar
d
{\displaystyle d}
.
Reemplazando la ecuación de la recta dentro de la ecuación de la esfera, y luego cambiando el cuadrado de la norma por un producto escalar , obtenemos:
‖
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}}
Distribuyendo y reordenando los términos:
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}
Se obtiene una ecuación cuadrática donde la incógnita es
d
{\displaystyle d}
:
a
d
2
+
b
d
+
c
=
0
{\displaystyle ad^{2}+bd+c=0}
Los coeficientes son:
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}}
La solución de esta ecuación es:
d
=
−
2
[
u
⋅
(
o
−
c
)
]
±
(
2
[
u
⋅
(
o
−
c
)
]
)
2
−
4
‖
u
‖
2
(
‖
o
−
c
‖
2
−
r
2
)
2
‖
u
‖
2
=
−
[
u
⋅
(
o
−
c
)
]
±
(
u
⋅
(
o
−
c
)
)
2
−
‖
u
‖
2
(
‖
o
−
c
‖
2
−
r
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}}}={\frac {-[\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} )]\pm {\sqrt {(\mathbf {u} \cdot (\mathbf {o} -\mathbf {c} ))^{2}-\left\Vert \mathbf {u} \right\Vert ^{2}(\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}-r^{2})}}}{\left\Vert \mathbf {u} \right\Vert ^{2}}}}
En el caso específico de que
u
{\displaystyle \mathbf {u} }
sea un vector unitario , es decir
‖
u
‖
2
=
1
{\displaystyle \left\Vert \mathbf {u} \right\Vert ^{2}=1}
, esto se puede simplificar aún más a (escribiendo
u
^
{\displaystyle {\hat {\mathbf {u} }}}
en lugar de
u
{\displaystyle \mathbf {u} }
para indicar que es un vector unitario):
d
=
−
[
u
^
⋅
(
o
−
c
)
]
±
(
u
^
⋅
(
o
−
c
)
)
2
−
‖
o
−
c
‖
2
+
r
2
{\displaystyle d=-[{\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} )]\pm {\sqrt {({\hat {\mathbf {u} }}\cdot (\mathbf {o} -\mathbf {c} ))^{2}-\left\Vert \mathbf {o} -\mathbf {c} \right\Vert ^{2}+r^{2}}}}
Y llamando
∇
{\displaystyle \nabla }
al discriminante :
∇
=
[
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 }}}
El valor del discriminante permite determinar cual de los tres casos se cumple:
Si
∇
<
0
{\displaystyle \nabla <0}
, entonces está claro en la ecuación anterior que no existen soluciones para
d
{\displaystyle d}
, es decir que la recta no corta a la esfera (caso 1).
Si
∇
=
0
{\displaystyle \nabla =0}
, entonces existe exactamente una solución, es decir que la línea solo toca la esfera en un punto (caso 2).
Si
∇
>
0
{\displaystyle \nabla >0}
, existen dos soluciones, y por lo tanto la línea corta a la esfera en dos puntos (caso 3).
Finalmente, en los casos 2 y 3, los puntos de intersección se pueden calcular reemplazando los valores obtenidos de
d
{\displaystyle d}
en la ecuación de la recta.
Véase también
Referencias
↑ 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 .