【问题标题】:Calculate the absolute position of the point having the position before rotation and rotation angles计算具有旋转前位置和旋转角度的点的绝对位置
【发布时间】:2012-08-14 13:08:52
【问题描述】:

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

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

是否有任何 DirectX 例程可以做到这一点?

【问题讨论】:

  • 你需要找到公式。这个问题和编程和这个引用有什么关系?
  • 这些角度指的是什么?它们是欧拉角吗?一般来说,你应该从这些角度得到一个旋转矩阵(方式取决于这些角度代表什么,参见例如here)并将其应用于位置向量。
  • 没有从(0,0,0)点旋转这样的东西。您可以绕轴旋转,但不能绕点旋转。请在您的问题中澄清这一点。
  • @Ali:看起来英语可能不是发帖人的主要语言。我相信他是在说旋转都以原点为中心。

标签: c++ math rotation directx


【解决方案1】:

您要问的是如何使用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 RotationsEuler-Rodreigues Rotation Matrices。通过显式定义三个旋转轴及其关联的旋转角度,然后将生成的旋转表示以相反的顺序相乘,将它们应用于要旋转的向量,可以组合这些矩阵以生成 12 个欧拉旋转矩阵中的任何一个。

DirectX 使用Quaternions for performing rotations

【讨论】:

  • +1 用于理解问题(我不能)并获得清晰详细的答案!
【解决方案2】:

在我的电子 (EM) 课程中,我学会了使用公式将笛卡尔坐标转换为极坐标

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

More Info Here

q 是 theta,f 是 phi。

【讨论】:

  • 我不认为这是发帖人要问的。您正在极坐标和笛卡尔坐标之间进行转换。 OP 询问是否使用欧拉角将一个点从一个位置旋转到另一个位置。
猜你喜欢
  • 2017-07-22
  • 2013-03-10
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多