4

我在 3D 空间中有两个正方形。我想找到它们之间的 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

1 回答 1

9

首先,您可以计算轴和旋转量(假设是任意轴):

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

然后您可以使用此处的函数将其转换为欧拉角

于 2012-05-22T17:25:57.977 回答