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°\).
\(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}}\)
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.
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)]
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}\)