2012-05-22 3 views
3

У меня есть два квадрата в трехмерном пространстве. Я хочу найти углы x, y, z между ними. Я начал с поиска нормальных векторов для обоих квадратов, и я пытаюсь понять, как получить угол между ними.Найти x, y, z вращение между двумя нормальными векторами

Я использую объекты XNA (C#) Vector3.

Я вычислил нормальные векторы следующим образом:

 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])); 

Я хочу найти вращение эйлеров, что получит normal1 перед тем же самым способом, как normal2

+4

Является ли это математика или программирование вопрос? –

ответ

7

Во-первых, вы можете рассчитать ось и количество вращения (предполагая, что произвольную ось):

Vector3 axis = Vector3.Cross(normal1, normal2); 
axis.Normalize(); 
double angle = Math.Acos(Vector3.Dot(normal1, normal2)/normal1.Length()/normal2.Length()); 

Если нормали нормализованы, то вычисление угла сводится к

double angle = Math.Acos(Vector3.Dot(normal1, normal2)); 

Затем вы можете превратить это в эйлеровых углов с функцией от here