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

È stato utile?

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
scroll top