c++ - 计算具有旋转前位置和旋转角度的点的绝对位置

标签 c++ math rotation directx

如何旋转点 (x, y, z)按角度 (rx, ry, rz)关于他们各自的轴?

也就是说,我如何确定点 (x1, y1, z1)(x, y, z) 的旋转产生按旋转角度(rx, ry, rz)

是否有任何 DirectX 例程可以完成此操作?

最佳答案

你问的是如何使用Euler Angles用于执行旋转。您可以选择多种约定,但在我看来,您有兴趣应用绕 Z 轴的旋转,然后绕 Y 旋转,然后绕 X 旋转。为此,您可以乘以矩阵

enter image description here

在哪里

c1 = cos(rx)    s1 = sin(rx)
c2 = cos(ry)    s2 = sin(ry)
cs = cos(rz)    s3 = sin(rz)

这种方法有几个问题,最常见的问题之一是 gimbal lock .首选方法是使用其中一种角轴公式。其中最常见的两个是 Unit Quaternion RotationsEuler-Rodreigues Rotation Matrices .通过显式定义三个旋转轴及其关联的旋转角度,然后以相反的顺序乘以生成的旋转表示,将它们应用于要旋转的 vector ,可以将它们组合起来生成 12 个欧拉旋转矩阵中的任何一个。

DirectX 使用 Quaternions for performing rotations .

关于c++ - 计算具有旋转前位置和旋转角度的点的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11952967/

相关文章:

c++ - POCO C++ 简单表单提交示例不起作用

c++ - 如何在 c++ 类中使用模板特化,为什么它不能编译?

algorithm - 计算 1<k<N 的 phi(k)

python - 快速找到全零答案的方法

ios - FGallery 覆盖了我其他 View 中的所有旋转方法

c++ - 无法分配对象,因为它的复制赋值运算符被隐式删除错误

c++ - 信号处理程序与事件处理程序

php - 查找哪些唯一数字被求和以产生结果数字

ios - 旋转 View 是否与自动布局兼容?

c++ - 图像旋转 OpenCV 错误