Usaremos el módulo Geometry de sympy para obtener la recta perpendicular
a dos rectas que se cruzan en el espacio. De las posibles alternativas
existentes para hacer este tipo de problemas se ha optado por la opción
de usar puntos genéricos y el producto escalar. De nuevo se usa el
backend de Plotly de la la librería Sympy Plotting
Backends’s
para hacer una representación gráfica sencilla del problema. Usando el
paquete de LateX pythontex, el archivo LyX propuesto nos va a permitir
resolver este tipo de problemas con solo cambiar los datos que se
introduzcan en el código python.
Un enunciado posible del problema que vamos a resolver es:
Ejercicio
Dadas las rectas r≡{x+y+1=0z−1=0 y s≡⎩⎨⎧xyz===2t4t−52t−4
Determina su posición relativa.
Halla los puntos de corte de la recta perpendicular a ambas rectas.
Determina, en forma vectorial, la ecuación de la recta que corta
perpendicularmente a ambas rectas.
A partir del apartado 2, halla la distancia entre ambas.
Comprueba que el resultado anterior coincide con el que se obtiene
haciendo uso de la fórmula para clacular la distancia entre dos
rectas que se cruzan mediante el producto vectorial y el producto mixto.
Podemos optar por poner los datos de entrada de forma manual o que se
generen de forma aleatoria:
#Podemos trabajar con dos opciones:
# 1 -> Datos manuales a partir de las rectas.
# Se tienen que introducir los valores de dos rectas que se cruzan,
# en ambos casos, a partir de dos puntos.
# 2-> Datos aleatorios a partir de dos puntos del espacio
# que son números enteros, serán la solución del apartado 2
#Si no ponemos que opción es "m" siempre se hace con datos aleatorios.
opcion='a'
Si se opta por manual, podemos modificar los valores
#if opcion=='m':
#Datos recta r: a partir de dos puntos.
p1R=Point3D(2,1,0)
p2R=Point3D(2,1,1)
#Datos recta s: a partir de dos puntos.
p1S=Point3D(2,-1,-1)
p2S=Point3D(3,0,-1)
En el caso de optar por que se generen los datos de forma aleatoria,
solo debemos cambiar (si se desea)
#Datos aleatorios a partir de dos puntos del espacio
#serán la solución del apartado 2
#que son números enteros
# Valores mínimos y máximos para las coordenadas aleatorias de los puntos.
vm=-2
vM=3
El gráfico creado para representar las dos rectas y los tres puntos se
consigue con las líneas de código:
#Vamos a usar el backend Plotly de spb si queremos usar usar MatplotLib se puede quitar backend=PB o poner backend=MB
# al usar Plotly podemos exportarlo a html y el formato puede ser más atractivo
#Con show=False no muestra el gráfico cuando lo compilamos, si cambiamos a True
# nos abre el navegador web para poder verlo
camara=dict(eye=dict(x=2,y=2,z=0.1))
aspecto=dict(x=1, y=1, z=1)
graf=plot_geometry((raux,"r"),(saux,"s"),(rPQ,'Recta perpendicular'),(Pu,"Pr"),(Qt,"Ps"),aspect=aspecto,camera=camara,show=False,backend=PB)
graf.save('rectas-cruzan.svg')
#Podemos guardar el gráfico en formato html y mostrarlo y manipularlo con el navegador web
#debemos poner la ruta, en caso contrario lo guarda en los ficheros temporales de LyX
#graf.save('/path/rectas-cruzan.html')
De la misma forma que se comentó en el artículo de Rectas que se cortan
en el espacio y punto de
corte
la última línea está comentada. Si se modifica de forma adecuada se
consigue un fichero html (además del svg de siempre) que nos permite
poder manipular con un navegador la representación gráfica obtenida con
Plotly. El resultado de una de las posibles soluciones se puede ver en
un enlace que hay al final del artículo.
A partir de los valores de entrada anteriores (obtenidos de forma
aleatoria), la solución del problema que se obtiene es:
Solución
Introduciendo parámetros en la ecuación de la recta r y,
si es posible, simplificando los vectores directores, tenemos que:
Si calculamos el vector
PrPs=(0,−5,−4)−(2,−3,1)=(−2,−2,−5)
el rango de la matriz
rango−11−212−201−5=3 ya que −11−212−201−5=11
Hallamos un punto genérico Pg de la recta r
(que dependerá de su parámetro, por ejemplo, u). Como la
ecuación paramétrica de la recta r es
⎩⎨⎧xyz===2−uu−31 obtenemos:
Pg=(2−u,u−3,1)
Hallamos otro punto Qg genérico de la recta s
(dependerá de otro parámetro t).
Qg=(2t,4t−5,2t−4)
Calculamos el vector PgQg
, que dependerá de dos parámetros.
Imponemos que el vector anterior sea perpendicular a los vectores
directores de las rectas r y s, y por lo tanto,
los productos escalares que siguen deben dar cero.
Nos queda un sistema de dos ecuaciones con dos incógnitas, si
resolvemos el sistema
{2t−2u12t−u−11=0=0
obtenemos que u=1 y t=1. Sustituyendo esos valores
en las ecuaciones paramétricas obtenemos que los puntos
Pr(1,−2,1) y
Qs(2,−1,−2) están sobre la perpendicular.
La perpendicular común es la recta que pasa por
Pr(1,−2,1) y
Qs(2,−1,−2). Si calculamos
PrQs=(2,−1,−2)−(1,−2,1)==(1,1,−3)
la ecuación pedida en forma vectorial es:
(x,y,z)=(1,−2,1)+α⋅(1,1,−3)
Por último, la distancia entre las dos rectas que se cruzan es la
distancia entre Pr y Qs
d(r,s)=∣PrQs∣=(1)2+(1)2+(−3)2=11
Sea Pr un punto cualquiera de la recta r y
Ps cualquiera un punto de la recta s, entonces:
d(r,s)=∣ur×us∣[ur,us,PrPs]
Un punto P de la recta r es el punto
Pr=(2,−3,1) , y un punto de la recta
s puede ser
Ps=(0,−5,−4)⇒PrPs=(0,−5,−4)−(2,−3,1)==(−2,−2,−5)