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