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

时间:2012-08-14 13:08:53

标签: c++ math rotation directx

如何围绕各自的轴以角度(x, y, z)旋转点(rx, ry, rz)

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

是否有任何DirectX例程可以实现此目的?

2 个答案:

答案 0 :(得分:3)

您要问的是如何使用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。这些可以通过明确定义三个旋转轴及其相关的旋转角度,然后将得到的旋转表示与它们应用于要旋转的矢量的相反顺序相乘,来生成12个Euler旋转矩阵中的任何一个。

DirectX使用Quaternions for performing rotations

答案 1 :(得分:1)

在我的电子学(EM)课程中,我学会了使用公式

将笛卡儿转换为极坐标
  

x = r sinq cosf,y = r sinq sinf,z = r cosq

More Info Here

q是theta,f是phi。