Rectas que se cortan en el espacio y punto de corte

Continuamos con el módulo Geometry de sympy para obtener las diferentes ecuaciones de una recta y hallar el punto de corte de dos rectas en el espacio. Uso de nuevo la librería Sympy Plotting Backends’s para hacer una representación gráfica sencilla del problema, en este caso usando el <<backend>> de Plotly. Usando pythontex el archivo LyX permite resolver todo tipo de problemas con solo cambiar los datos que se introduzcan en el código python.

Para poder obtener el gráfico, debemos tener instalada la librería Sympy Plotting Backends’s en la forma que se comenta en el artículo Punto simétrico de un punto respecto de una recta en el plano.

Un posible enunciado del problema que vamos a resolver es:

Dados los puntos \(A\left(-4,\ 3,\ -2\right)\) y \(B\left(1,\ 3,\ 2\right)\) se considera la recta \(r\) que pasa por ambos. Se pide:

  1. Obtén la ecuación vectorial, paramétrica, continua e implícita (o general) de \(r\).
  2. Estudia la posición relativa de la recta \(r\) con la recta \(s\), cuya ecuación implícita es: \(s\equiv\begin{cases} x+y-9 & =0\\ -x+3z-12 & =0 \end{cases}\)
  3. Halla las coordenadas del punto de intersección de ambas rectas.

En la solución del ejercicio, al obtener la ecuación continua, se discrimina el tipo de ecuación que se obtiene si alguna de las coordenadas del vector director es igual a cero. Para eso se usa la función ImpCon.

Los valores de entrada se consiguen con:

  • Para las soluciones que luego obtendremos de los parámetros:

    #Valor del parámetro para el punto de corte, será la solución del sistema final
    vpr=2
    ##vps no puede ser 0
    vps=-1
    #Podemos optar por que sean fracciones
    #vpr=Rational(3,4)
    #vps=Rational(-1,2)
    #O aleatorios
    #vpr=random.randint(1,5)
    #vps=random.randint(2,6)
    
  • Para los puntos que determinan la recta \(r\) y el vector director de la recta \(s\) podemos optar porque los valores sean aleatorios o bien definirlos de forma manual:

    #Primera recta, se obtiene a partir de dos puntos, descomentar las tres que siguen
    #pA=Point3D(1,2,3)
    #pB=Point3D(-1,3,1)
    #dR=pB-pA
    #O aleatorios, en ese caso poner los puntos antes y control = False
    control = True
    while control:
        pA=Point3D(randMatrix(1,3,-4,4))
        pB=Point3D(randMatrix(1,3,-4,4))
        #Vector director
        dR=pB-pA
        mv=Matrix(dR)
        if mv.rank()==1:
            control = False
    ...
    # Segunda recta: a partir del punto de corte y de su vector director
    # El vector director se obtiene aleatorio pero se puede definir de forma
    # manual garantizándose que los dos vectores directores no son proporcionales
    control = True
    while control:
        dS=Point3D(randMatrix(1,3,-3,3))
        #Matriz de los dos vectores
        mv=Matrix([dS,dRs])
        #Se tienen que cortar o cruzar y no permito que la primera coordenada sea 0
        if mv.rank()==2 and dS[0]!=0:
            #simplifico el vector dS
            dS=dS/gcd(dS)
            mv=Matrix([dS,dRs])
            control = False
    #Podemos poner el vector director de s de forma manual aquí.
    # para que no de error la función ImpGauss la primera corrdenada debe ser no 0
    #dS=Point3D[]
    

Puede ser interesante revisar el uso del método elementary_row_op usado en la función ImpGauss. Nos permite realizar transformaciones elementales de filas en una matriz.

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
#Sí lo dejamos así usa MatPlotlib
#graf=plot_geometry((raux,"r"),(saux,"s"),(pC,"P"),axis_center=(0,0,0),aspect="equal",show=False)
#Con show=False no muestra el gráfico cuando lo compilamos, si cambiamos a True
# nos abre el navegador web para poder verlo
graf=plot_geometry((raux,"r"),(saux,"s"),(pC,"P"), aspect="cube",show=False,backend=PB)
graf.save('rectas-cortan.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-cortan.html')

En ellas se explica un poco lo que se permite/hace. Es interesante resaltar la última línea que 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

  1. \(\vec{u}_{r}=\overrightarrow{AB}=\left(1,\ 3,\ 2\right)-\left(-4,\ 3,\ -2\right)=\left(5,\ 0,\ 4\right)\)

    • Vectorial: \((x,y,z)=\left(-4,\ 3,\ -2\right)+u\cdot\left(5,\ 0,\ 4\right)\)
    • Paramétrica: \(\begin{cases} x= & 5u-4\\ y= & 3\\ z= & 4u-2 \end{cases}\)
    • Continua: \(\frac{x-\left(-4\right)}{5}=\frac{z-\left(-2\right)}{4}\) , \(y=3\)
    • Implícita: \(\begin{cases} y-3 & =0\\ -4x+5z-6 & =0 \end{cases}\)
  2. Si introducimos parámetros en la ecuación implícita de \(s\) obtenemos que una posible expresión de \(s\) en paramétricas es \(s:\begin{cases} x= & 3t+9\\ y= & -3t\\ z= & t+7 \end{cases}\)

    y por tanto \(\overrightarrow{u}_{s}=\left(3,\ -3,\ 1\right)\) y un punto de \(s\) es \(P_{s}=\left(9,\ 0,\ 7\right)\)

    Ya sabemos que \(\overrightarrow{u}_{r}=\left(5,\ 0,\ 4\right)\). Como \(rango\begin{pmatrix}3 & -3 & 1\\ 5 & 0 & 4 \end{pmatrix}=\)\(rango\begin{pmatrix}3 & -3 & 1\\ 0 & 15 & 7 \end{pmatrix}=\)\(2\) las rectas o se cortan o se cruzan (esto se puede ver también a partir de que los vectores directores no son proporcionales).

    Consideremos el vector \(\overrightarrow{P_{r}P_{s}}=\left(9,\ 0,\ 7\right)-\left(-4,\ 3,\ -2\right)=\left(13,\ -3,\ 9\right)\) .

    Como \(rango\begin{pmatrix}3 & -3 & 1\\ 5 & 0 & 4\\ 13 & -3 & 9 \end{pmatrix}=\)\(rango\begin{pmatrix}3 & -3 & 1\\ 0 & 15 & 7\\ 0 & 0 & 0 \end{pmatrix}=\)\(2\) las rectas se cortan (también lo podemos ver con que \(\left|\begin{matrix}3 & -3 & 1\\ 5 & 0 & 4\\ 13 & -3 & 9 \end{matrix}\right|=0\)).

  3. Las ecuaciones paramétricas de ambas rectas son: \(r:\begin{cases} x= & 5u-4\\ y= & 3\\ z= & 4u-2 \end{cases}\) y \(s:\begin{cases} x= & 3t+9\\ y= & -3t\\ z= & t+7 \end{cases}\)

    Si igualamos ambas ecuaciones paramétricas obtenemos el sistema (en \(t\) y \(u\))

    \begin{equation*} \begin{array}{c} 3t+9=5u-4\\ -3t=3\\ t+7=4u-2 \end{array}\Rightarrow\begin{array}{c} 3t-5u+13=0\\ -3t-3=0\\ t-4u+9=0 \end{array} \end{equation*}

    Si lo resolvemos (ya sabemos que es compatible), por ejemplo por Gauss, tenemos que:

    \(\left(\begin{matrix}3 & -5 & -13\\ -3 & 0 & 3\\ 1 & -4 & -9 \end{matrix}\right)\hookrightarrow\) \(\left(\begin{matrix}1 & -5/3 & -13/3\\ -3 & 0 & 3\\ 1 & -4 & -9 \end{matrix}\right)\hookrightarrow\) \(\left(\begin{matrix}1 & -5/3 & -13/3\\ 0 & -5 & -10\\ 1 & -4 & -9 \end{matrix}\right)\hookrightarrow\) \(\left(\begin{matrix}1 & -5/3 & -13/3\\ 0 & -5 & -10\\ 0 & -7/3 & -14/3 \end{matrix}\right)\hookrightarrow\) \(\left(\begin{matrix}1 & -5/3 & -13/3\\ 0 & 1 & 2\\ 0 & -7/3 & -14/3 \end{matrix}\right)\hookrightarrow\) \(\left(\begin{matrix}1 & -\frac{5}{3} & -\frac{13}{3}\\ 0 & 1 & 2\\ 0 & 0 & 0 \end{matrix}\right)\)

    y por tanto tenemos como soluciones: \(t=-1\) y \(u=2\)

    En consecuencia, sustituyendo algunos de los dos parámetros anteriores en sus ecuaciones correspondientes, obtenemos que el punto de corte es

    \begin{equation*} P=\left(6,\ 3,\ 6\right) \end{equation*}

    image

Además, hemos generado un html con el gráfico que se puede ver desde:

Como siempre, el fichero fuente y el pdf final de una posible compilación.