Direzione di una retta nello spazio

Il vettore \({\textbf v}\) parallelo alla retta \(r\) è il vettore direttore della retta, e le sue componenti rispetto alla base del sist. di rif. aff./orton. sono i parametri direttori \({\textbf v = (l,m,n)}\).

La direzione della retta può essere individuata attraverso infiniti vettori paralleli a \({\textbf v}\) differenti per un fattore di proporzionalità non nullo: \(\lambda{\textbf v} \quad con\quad \lambda \in \mathbb{R} - \{0\}\)

Dalla forma parametrica

Nel caso si disponga delle equazioni parametriche della retta, la direzione è data dalle componenti di \({\textbf v}\) nel sistema:

\(x = x_0 + t{\textbf l}\)

\(y = y_0 + t{\textbf m}\)

\(z = z_0 + t{\textbf n}\)

Dalla forma cartesiana

Nel caso si disponga della forma cartesiana della retta si può passare a quelle parametriche e fare quanto sopra. In alternativa si può, lavorando in un sist. rif. ortonormale, fare il prodotto vettoriale tra i direttori delle due rette:

\(\pi = {\textbf a}x+{\textbf b}y+{\textbf c}z+d=0\)

\(\pi' = {\textbf a'}x+{\textbf ld b'}y+{\textbf c'}z+d'=0\)

quindi, indicandoli rispettivamente con \({\textbf n}\) ed \({\textbf n'}\):

\({\textbf v}_r = {\textbf n} \times {\textbf n'}\)

La direzione è ortogonale ad entrambi i vettori.

Da due punti

Avendo due punti \(P_0\) e \(P_1\) si può calcolare il vettore direttore facendo: \(\overrightarrow{P_0P_1}\) ossia \(P_1-P_0 = (x_1-x_0, y_1-y_0, z_1-z_0)\) o viceversa (cambia orientamento/verso ma non direzione).

Funzione riassumibile

import sympy as sp
from typing import List

def direzioneRetta(equazioni_parametriche: List[sp.Expr]=None, equazioni_cartesiane: List[sp.Expr]=None, P_0:sp.Matrix=None, P_1:sp.Matrix=None) -> sp.Matrix:
    if equazioni_parametriche is not None:
        t = sp.symbols("t")
        x = -sp.Poly(equazioni_parametriche[0]).coeff_monomial(t) if t in equazioni_parametriche[0].free_symbols else 0
        y = -sp.Poly(equazioni_parametriche[1]).coeff_monomial(t) if t in equazioni_parametriche[1].free_symbols else 0
        z = -sp.Poly(equazioni_parametriche[2]).coeff_monomial(t) if t in equazioni_parametriche[2].free_symbols else 0

        return sp.Matrix([[x,y,z]])

    elif equazioni_cartesiane is not None:
        x,y,z = sp.symbols("x y z")
        a = sp.Poly(equazioni_cartesiane[0]).coeff_monomial(x) if x in equazioni_cartesiane[0].free_symbols else 0
        b = sp.Poly(equazioni_cartesiane[0]).coeff_monomial(y) if y in equazioni_cartesiane[0].free_symbols else 0
        c = sp.Poly(equazioni_cartesiane[0]).coeff_monomial(z) if z in equazioni_cartesiane[0].free_symbols else 0

        a1 = sp.Poly(equazioni_cartesiane[1]).coeff_monomial(x) if x in equazioni_cartesiane[1].free_symbols else 0
        b1 = sp.Poly(equazioni_cartesiane[1]).coeff_monomial(y) if y in equazioni_cartesiane[1].free_symbols else 0
        c1 = sp.Poly(equazioni_cartesiane[1]).coeff_monomial(z) if z in equazioni_cartesiane[1].free_symbols else 0

        return sp.Matrix([[a,b,c]]).cross(sp.Matrix([[a1,b1,c1]]))

    elif P_0 is not None and P_1 is not None:
        return P_1 - P_0

Esempio con forma parametrica

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

fp = [
    x - 1 + 3*t,
    y + sp.Rational(1/2)*t,
    z + 4
]

direzioneRetta(equazioni_parametriche=fp)

\(\displaystyle \left[\begin{matrix}-3 & - \frac{1}{2} & 0\end{matrix}\right]\)

Esempio con forma cartesiana

fc = [
    x - z,
    3*x + y + 2*z
]

direzioneRetta(equazioni_cartesiane=fc)

\(\displaystyle \left[\begin{matrix}1 & -5 & 1\end{matrix}\right]\)

Esempio con due punti

P_0 = sp.Matrix([[1,2,-1]])
P_1 = sp.Matrix([[2,-1,3]])

direzioneRetta(P_0=P_0, P_1=P_1)

\(\displaystyle \left[\begin{matrix}1 & -3 & 4\end{matrix}\right]\)

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/geometria-dello-spazio/684-coefficienti-direttori-di-una-retta.html