Dalle equazioni parametriche della retta alle equazioni cartesiane

Si dispone delle equazioni parametriche di una rette \(r\):

\(x = x_0 + tl\)

\(y = y_0 + tm\)

\(z = z_0 + tn\)

si vuole ricavarne le equazioni cartesiane, dunque determinare una rappresentazione della retta come intersezione di due piani (non paralleli):

\(ax+by+cz+d = 0\)

\(a'x+b'y+c'z+d' = 0\)

Caso 1) In tutte le equazioni parametriche compare il parametro \(t\):

  • scegliere un'equazione ed esplicitarla in favore di \(t\)
  • considerare il sistema composto dalle restanti equazioni sostituendo \(t\) con l'espressione ricavata
  • portando tutto a primo membro e semplificando si ottengono le equazioni cartesiane

Caso 2) Una delle 3 equazioni della retta non dipende dal parametro, è nella forma \(incognita=costante\)

  • tale equazione è già una delle 2 equazioni cartesiane
  • l'altra si ricava come descritto nel caso 1 sulle altre due (eplicitamento in favore di \(t\) e sostituzione portando a primo membro e semplificando)

Caso 3) Due equazioni parametriche della retta non dipendono dal parametro: tali equazioni costituiscono le equazioni cartesiane.

Funzione riassumibile

from typing import List
import sympy as sp

def equazioniParametricheRettaToEquazioniCartesiane(equazioni_parametriche: List[sp.Expr], override_t_val_index: int = None) -> List[sp.Expr]:
    t = sp.symbols("t")

    t_eqs = list(filter(lambda ep: t in ep.free_symbols, equazioni_parametriche))
    c_eqs = list(filter(lambda ep: t not in ep.free_symbols, equazioni_parametriche))

    if len(c_eqs) is 2:
        return c_eqs
    elif len(c_eqs) is 1:
        equazioni_cartesiane = c_eqs
        t_val_index = override_t_val_index if override_t_val_index is not None else 0
        t_val = sp.solve(t_eqs[t_val_index], t)[0]

        for i in [0,1]:
            if i is not t_val_index:
                equazioni_cartesiane.append(t_eqs[i].subs(t, t_val))
        return equazioni_cartesiane
    elif len(c_eqs) is 0:
        equazioni_cartesiane = []
        t_val_index = override_t_val_index if override_t_val_index is not None else 0
        t_val = sp.solve(t_eqs[t_val_index], t)[0]

        for i in [0,1,2]:
            if i is not t_val_index:
                equazioni_cartesiane.append(t_eqs[i].subs(t, t_val))
        return equazioni_cartesiane

Esempi

x,y,z,t = sp.symbols("x y z t")

eq_parametriche = [
    x - 2 + 3*t,
    y + 1 - t,
    z - 5 - 5*t
]

equazioniParametricheRettaToEquazioniCartesiane(eq_parametriche, override_t_val_index=1)
[x + 3*y + 1, -5*y + z - 10]
eq_parametriche = [
    x - 3,
    y - 2 - 3*t,
    z - 3 + t
]

equazioniParametricheRettaToEquazioniCartesiane(eq_parametriche, override_t_val_index=1)
[x - 3, y + 3*z - 11]
eq_parametriche = [
    x,
    y + 2,
    z - 6 + 7*t
]

equazioniParametricheRettaToEquazioniCartesiane(eq_parametriche)
[x, y + 2]

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/geometria-dello-spazio/1156-retta-dalle-parametriche-alle-cartesiane.html