Fissato riferimento cart. affine od ortonormale, siano i due piani non paralleli, nè distinti, né coincidenti, ossia sono incidenti:
\(\pi = ax+by+cz+d=0\)
\(\pi' = a'x+b'y+c'z+d'=0\)
Come visto nella sezione 7 - Piani paralleli e coincidenti, per tale condizione il rango della matrice che ha per righe i coefficienti delle incognite deve essere pari a 2 (\(\infty^1\) soluzioni). Per tanto la retta si rappresenta tramite sistema lineare di equazioni cartesiane (retta mediante equazioni cartesiane):
\(ax+by+cz+d = 0\)
\(a'x+b'y+c'z+d' = 0\)
Sono sufficienti due punti di \(r\) \(P_0\) e \(P_1\) (perchè si ottiene il vettore parallelo da \(\overrightarrow{P_0P_1}\)) o un punto e il vettore parallelo \({\textbf v}\). Fissato il rif. cart. sono fornite le coordinate cartesiane di un punto della retta \(P_0(x_0,y_0,z_0)\) e le componenti di un vettore parallelo a \(r\): \({\textbf v}=l{\textbf i}+m{\textbf j}+n{\textbf k}\). Per calcolare le equazioni cartesiane della retta:
1) le componenti del vettore direzione sono tutte non nulle (\(l \ne 0, m \ne 0, n \ne 0\)):
\(\frac{x-x_0}{l} = \frac{y-y_0}{m}\\\frac{y-y_0}{m} = \frac{z-z_0}{n}\)
2) una componente del vettore è nulla, ad esempio \(l=0,m \ne 0, n \ne 0\):
\(x=x_0\\\frac{y-y_0}{m} = \frac{z-z_0}{n}\)
3) due componenti del vettore sono nulle, ad esempio \(l=0,m = 0, n \ne 0\):
\(x=x_0\\y=y_0\)
in pratica la componente diversa da 0 non appare nel sistema
import sympy as sp
from typing import List
def equazioniCartesianeRetta(P_0: sp.Matrix, v: sp.Matrix=None, P_1: sp.Matrix=None) -> List[sp.Expr]:
x,y,z = sp.symbols("x y z")
x0, y0, z0 = P_0[0,0], P_0[0,1], P_0[0,2]
if v is None and P_1 is not None:
v = P_1 - P_0
elif v is None and P_1 is None:
raise Exception("Fornire il vettore direttore o un secondo punto")
l,m,n = int(v[0,0]), int(v[0,1]), int(v[0,2])
r1,r2 = 0,0
if l is not 0 and m is not 0 and n is not 0:
r1 = ((x - x0) / l) - ((y - y0) / m)
r2 = ((y - y0) / m) - ((z - z0) / n)
elif l is not 0 and m is not 0 and n is 0:
r1 = z - z0
r2 = (x - x0)/l - (y - y0)/m
elif l is not 0 and m is 0 and n is not 0:
r1 = y - y0
r2 = (x - x0)/l - (z - z0)/n
elif l is 0 and m is not 0 and n is not 0:
r1 = x - x0
r2 = (y - y0)/m - (z - z0)/n
elif l is 0 and m is not 0 and n is 0:
r1 = x - x0
r2 = z - z0
elif l is 0 and m is 0 and n is not 0:
r1 = x - x0
r2 = y - y0
elif l is not 0 and m is 0 and n is 0:
r1 = y - y0
r2 = z - z0
return [r1,r2]
P_0 = sp.Matrix([[2,-2,1]])
v = sp.Matrix([[2,4,2]])
equazioniCartesianeRetta(P_0, v=v)
[x/2 - y/4 - 3/2, y/4 - z/2 + 1]
P_0 = sp.Matrix([[3,1,1]])
v = sp.Matrix([[1,1,0]])
equazioniCartesianeRetta(P_0, v=v)
[z - 1, x - y - 2]
P_0 = sp.Matrix([[2,2,4]])
P_1 = sp.Matrix([[2,1,4]])
equazioniCartesianeRetta(P_0, P_1=P_1)
[x - 2, z - 4]