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\):
Caso 2) Una delle 3 equazioni della retta non dipende dal parametro, è nella forma \(incognita=costante\)
Caso 3) Due equazioni parametriche della retta non dipendono dal parametro: tali equazioni costituiscono le equazioni cartesiane.
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
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]