Dalle equazioni parametriche del piano all'equazione cartesiana

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\)

  • se in una delle tre equazioni non appare alcuno dei parametri allora tale equazione è l'equazione cartesiana

    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\)

  • altrimenti si procede con il metodo di cancellazione dei parametri (simile al metodo di sostituzione per i sistemi lineari)
  • scegliere uno tra \(s\) e \(t\) che compaia almeno in due equazioni esplicitandone una in termini del parametro scelto
  • sostituire l'equazione ricavata nelle altre due. Se una di queste non presenta alcun parametro dopo la sostituzione si è trovata l'equazione cartesiana, altrimenti reiterare l'esplicitazione a parametro di una delle due eq rimanenti fino ad ottenimento dell'eq.

Funzione riassumibile

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]

Esempi

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

png

\(\displaystyle - 2 x + 3 y + z + 5\)

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/geometria-dello-spazio/706-passare-dalle-equazioni-parametriche-del-piano-all-equazione-cartesiana.html