Angolo tra piani

Fa riferimento alla sezione "Retta-Coseni direttori e angolo tra due rette". Fissato un sist. di rif. cartesiano ortonormale \(RC(O,i,j,k)\) considerando due piani non paralleli \(\alpha,\beta\). Si tagliano i piani con un piano \(\gamma\) perpendicolare ad entrambi. Si ha quindi la retta \(t\) intersezione di \(\alpha,\beta\), \(r\) intersezione di \(\alpha,\gamma\) e \(s\) intersezione di \(\beta,\gamma\) (vedasi disegno in riferimento).

\(P\) è il punto di intersezione dei tre piani e le rette \(r\) e \(s\) generano quattro angoli con vertice in \(P\): \(\phi,\phi',\mu,\mu'\) dove \(\phi=\phi'\) e \(\mu=\mu'\) in quanto opposti al vertice. \(\phi,\mu\) sono supplementari.

I due angoli convessi formati da \(r\) e \(s\) prendono il nome di angoli tra i piani \(\alpha,\beta\) si indicano con \(\widehat{(\alpha\beta)}_1\) e \(\widehat{(\alpha\beta)}_2\).

Nel caso di due piani paralleli ma coincidenti le rette \(r\) e \(s\) coincidono formando rispettivamente \(\widehat{(\alpha\beta)}_1=0°\) e \(\widehat{(\alpha\beta)}_1=180°\).

Formula per il calcolo dell'angolo tra due piani

  • \({\textbf n}_{\alpha},{\textbf n}_{\beta}\): vettori direttori dei piani \(\alpha,\beta\), con direzioni parallele a \(\gamma\).
  • \(r',s'\) le rette costruite applicando \({\textbf n}_{\alpha},{\textbf n}_{\beta}\) nel punto \(P\). Ricordando il calcolo dell'angolo tra due rette nello spazio, si possono calcolare gli angoli \((\widehat{r's'})_1,(\widehat{r's'})_2\) come gli angoli formati dai vettori \({\textbf n}_{\alpha},-{\textbf n}_{\alpha},{\textbf n}_{\beta},-{\textbf n}_{\beta}\) (quindi senza curarsi dell'orientamento); per tanto la formula per calcolare gli angoli trai i due piani \(\alpha,\beta\) discende da quella per il calcolo dell'angolo tra vettori:

\(cos(\widehat{\alpha\beta})=\pm \frac{{\textbf n}_{\alpha} \cdot {\textbf n}_{\beta}}{||{\textbf n}_{\alpha}||\quad ||{\textbf n}_{\beta}||}=\pm \frac{aa'+bb'+cc'}{\sqrt{a^2+b^2+c^2}\sqrt{a'^2+b'^2+c'^2}}\)

  • se \(cos(\widehat{\alpha\beta}) = 0\) i piani sono perpendicolari (\(aa'+bb'+cc'=0\))
  • se \(cos(\widehat{\alpha\beta}) \pm 1\) i piani sono paralleli.

Ad esempio date le equazioni cartesiane di due piani:

\(\alpha: x+y+2x-3=0\)

\(\beta:x-2y-z+7=0\)

si ottengono immediatamente i vettori dei coefficienti direttori \({\textbf n}_{\alpha}=(1,1,2),{\textbf n}_{\beta}=(1,-2,-1)\). A questo punto si usa la formula sopra, non è necessario valutarla con il \(\pm\) in quanto le equazioni forniscono un'orientazione privilegiata (versore direzione \(x\) crescente \((1,0,0)\)).

Anche qui, una volta trovato il coseno, si può calcolare l'angolo con arccos.

Funzione riassumibile

from ipynb.fs.full.piano_coefficienti_direttori import coefficientiDirettori
from typing import List
import sympy as sp

def angoloTraPiani(equazione_cartesiana_alpha: sp.Expr = None, equazioni_parametriche_alpha: List[sp.Expr] = None, equazione_cartesiana_beta: sp.Expr = None, equazioni_parametriche_beta: List[sp.Expr] = None, orientazione: int = None,) -> float:
    n_alpha = coefficientiDirettori(equazione_cartesiana=equazione_cartesiana_alpha, equazioni_parametriche=equazioni_parametriche_alpha)
    n_beta = coefficientiDirettori(equazione_cartesiana=equazione_cartesiana_beta, equazioni_parametriche=equazioni_parametriche_beta)

    if orientazione is not None:
        if orientazione < 0:
            n_beta = -n_beta if n_beta[abs(orientazione)-1] > 0 else n_beta
            n_alpha = -n_alpha if n_alpha[abs(orientazione)-1] > 0 else n_alpha
        elif orientazione > 0:
            n_beta = -n_beta if n_beta[abs(orientazione)-1] < 0 else n_beta
            n_alpha = -n_alpha if n_alpha[abs(orientazione)-1] < 0 else n_alpha

    num = n_alpha.dot(n_beta)
    denom = sp.sqrt(n_alpha[0,0]**2 + n_alpha[0,1]**2 + n_alpha[0,2]**2) * sp.sqrt(n_beta[0,0]**2 + n_beta[0,1]**2 + n_beta[0,2]**2)

    cos_alpha_beta = num/denom

    if orientazione is not None:
        return sp.acos(cos_alpha_beta)
    else:
        return [sp.acos(cos_alpha_beta), sp.acos(-cos_alpha_beta)]

Esempi

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

alpha = x + y + 2*z - 3
beta = x - 2*y - z + 7

angoloTraPiani(equazione_cartesiana_alpha=alpha, equazione_cartesiana_beta=beta)
[2*pi/3, pi/3]
alpha = 3*x - 1
beta = x + y + 5

angoloTraPiani(equazione_cartesiana_alpha=alpha, equazione_cartesiana_beta=beta)
[pi/4, 3*pi/4]
alpha = -x + y - 1
beta = -x + 2*y - z

angoloTraPiani(equazione_cartesiana_alpha=alpha, equazione_cartesiana_beta=beta, orientazione=1)

\(\displaystyle \frac{\pi}{6}\)

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/geometria-dello-spazio/4071-angolo-di-due-piani.html