Trova la rotazione x, y, z tra due vettori normali
-
13-12-2019 - |
Domanda
Ho due quadrati nello spazio 3D.Voglio trovare gli angoli X, Y, Z tra di loro.Ho iniziato trovando i normali vettori per entrambi i quadrati e sto cercando di capire come ottenere l'angolo tra di loro.
Sto usando gli oggetti XNA (C #) Vector3.
Ho calcolato i normali vettori come segue:
Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));
.
Voglio trovare la rotazione Eulero che diventerà normale1 di fronte allo stesso modo del normale2
Soluzione
In primo luogo, è possibile calcolare l'asse e la quantità di rotazione (assumendo un asse arbitrario):
Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());
.
Se le normali sono normalizzate, il calcolo dell'angolo si riduce a
double angle = Math.Acos(Vector3.Dot(normal1, normal2));
.
Poi puoi trasformarlo in angoli Eulero con la funzione da qui
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow