如何旋转点 (x, y, z)
按角度 (rx, ry, rz)
关于他们各自的轴?
也就是说,我如何确定点 (x1, y1, z1)
由 (x, y, z)
的旋转产生按旋转角度(rx, ry, rz)
?
是否有任何 DirectX 例程可以完成此操作?
最佳答案
你问的是如何使用Euler Angles用于执行旋转。您可以选择多种约定,但在我看来,您有兴趣应用绕 Z 轴的旋转,然后绕 Y 旋转,然后绕 X 旋转。为此,您可以乘以矩阵
在哪里
c1 = cos(rx) s1 = sin(rx)
c2 = cos(ry) s2 = sin(ry)
cs = cos(rz) s3 = sin(rz)
这种方法有几个问题,最常见的问题之一是 gimbal lock .首选方法是使用其中一种角轴公式。其中最常见的两个是 Unit Quaternion Rotations和 Euler-Rodreigues Rotation Matrices .通过显式定义三个旋转轴及其关联的旋转角度,然后以相反的顺序乘以生成的旋转表示,将它们应用于要旋转的 vector ,可以将它们组合起来生成 12 个欧拉旋转矩阵中的任何一个。
DirectX 使用 Quaternions for performing rotations .
关于c++ - 计算具有旋转前位置和旋转角度的点的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11952967/