如何围绕各自的轴以角度(x, y, z)
旋转点(rx, ry, rz)
?
也就是说,如何通过旋转角度(x1, y1, z1)
确定(x, y, z)
的旋转所产生的点(rx, ry, rz)
?
是否有任何DirectX例程可以实现此目的?
答案 0 :(得分:3)
您要问的是如何使用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。这些可以通过明确定义三个旋转轴及其相关的旋转角度,然后将得到的旋转表示与它们应用于要旋转的矢量的相反顺序相乘,来生成12个Euler旋转矩阵中的任何一个。
DirectX使用Quaternions for performing rotations。
答案 1 :(得分:1)
在我的电子学(EM)课程中,我学会了使用公式
将笛卡儿转换为极坐标x = r sinq cosf,y = r sinq sinf,z = r cosq
q是theta,f是phi。