c# - 找到两个法向量之间的 x,y,z 旋转

标签 c# math xna euler-angles

我在 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 相同的方向的欧拉旋转

最佳答案

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

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 中的函数将其转换为欧拉角

关于c# - 找到两个法向量之间的 x,y,z 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706708/

相关文章:

c# - 计算三角形 3D 网格的质心

c++ - 如何优化非线性方程组的解?

javascript - js 生成一个在 20 秒内上升的随机数

C# XNA A* 寻路敌人卡在对面的墙上

c# - 通过 C# 应用程序访问服务器中的文件

c# - SqlCommand.ExecuteScalar 避免空值

c# - 从转发器 asp.net c# 中的文本框获取值

c# - Sprite Batch 不会改变 Alpha

c# - Xbox360 上的 XNA 和 Linq

c# - 如何根据节点将 XML 文件拆分为多个 XML 文件