Data l'equazione parametrica:
\(x=x_0+sl_1+tl_2\)
\(y=y_0+sm_1+tm_2\)
\(z=z_0+sn_1+tn_2\)
con \(s,t \in \mathbb{R}\), \((x_0,y_0,z_0)\) coordinate cartesiane di \(P_0 \in \pi\) e \((l_1,m_1,n_1),(l_2,m_2,n_2)\) coordinate dei vettori di giacitura rispetto alla base che definisce il sist. di rif. affine od ortonormale. Determinare l'equazione cartesiana del piano \(\pi\):
\(\pi: ax+by+cz+d=0\)
Ad esempio: \(x=x_0\) \(y = y_0+sm_1+tm_2\) \(z=z_0+sn_1+tn_2\) Allora l'equazione cartesiana è \(x-x_0 = 0\)
from typing import List
import sympy as sp
def equazioniParametrichePianoToEquazioneCartesiana(equazioni_parametriche: List[sp.Expr], s: sp.Symbol, t:sp.Symbol) -> sp.Expr:
for eq in equazioni_parametriche:
if s not in eq.free_symbols and t not in eq.free_symbols:
return eq
s_cont = s in equazioni_parametriche[0].free_symbols, s in equazioni_parametriche[1].free_symbols, s in equazioni_parametriche[2].free_symbols
t_cont = t in equazioni_parametriche[0].free_symbols, t in equazioni_parametriche[1].free_symbols, t in equazioni_parametriche[2].free_symbols
def process(a: sp.Symbol, equazioni: List[sp.Expr]):
new_eq = []
for eq in equazioni:
if a in eq.free_symbols:
a_val = sp.solve(eq, a)[0]
for eq2 in equazioni:
new_eq.append(eq2.subs(a, a_val))
return new_eq
if sum(bool(x) for x in s_cont) >= 2:
sub_equazioni_parametriche = process(s, equazioni_parametriche)
sub_equazioni_parametriche = process(t, sub_equazioni_parametriche)
return list(filter(lambda eq: len(eq.free_symbols) > 0, sub_equazioni_parametriche))[0]
elif sum(bool(x) for x in t_cont) >= 2:
sub_equazioni_parametriche = process(t, equazioni_parametriche)
sub_equazioni_parametriche = process(s, sub_equazioni_parametriche)
return list(filter(lambda eq: len(eq.free_symbols) > 0, sub_equazioni_parametriche))[0]
x,y,z,s,t = sp.symbols("x y z s t")
equazioni_parametriche = [
x - 2,
y - 3*s - t,
z - 1 - s - 5*t
]
equazioniParametrichePianoToEquazioneCartesiana(equazioni_parametriche, s, t)
\(\displaystyle x - 2\)
x,y,z,s,t = sp.symbols("x y z s t")
equazioni_parametriche = [
x - 1 - s,
y - t,
z - 2 - s
]
equazioniParametrichePianoToEquazioneCartesiana(equazioni_parametriche, s, t)
\(\displaystyle - x + z - 1\)
from ipynb.fs.full.common_functions import plotPlane
x,y,z,s,t = sp.symbols("x y z s t")
equazioni_parametriche = [
x -3 -s - 2*t,
y - s - t,
z - 1 + s - t
]
result = equazioniParametrichePianoToEquazioneCartesiana(equazioni_parametriche, s, t)
plotPlane(result)
result
\(\displaystyle - 2 x + 3 y + z + 5\)