2

我试图做的是建立一个相对坐标系。它所做的是获取点 A 的 XYZ 坐标。然后它应该将该位置平移到点 B 上以获得点 C 的位置,点 B 可以在所有三个轴上旋转和平移,但点 A 仅平移,不平移旋转。

基本上发生的事情是你有2个矩形,一个左下角在原点,一个左下角是B点。如果第一个矩形的右上角是A点,那么在第二个矩形的右上角是 C 点,无论第二个矩形如何旋转或平移,C 点始终位于第二个矩形的右上角。但是,如果 A 点移动到右下角,那么 C 点将始终位于第二个矩形的右下角

我曾多次尝试评估正确的表达方式,而我想出的结果我认为很接近。我有一些变化:

X': Xcos(pitch) - Zcos(pitch) + Xcos(yaw) + Ysin(yaw) + X.pointB

Y': Ycos(yaw) + Xsin(yaw) + Ycos(roll) + Zsin(roll) + Y.pointB

Z': Ysin(roll) + Zcos(roll) + Xsin(pitch) + Zcos(pitch) + Z.pointB

其中方程中的 XYZ 是点 A 的坐标,俯仰角、偏航角和滚动角是第二个矩形的角度(以度为单位)。

4

1 回答 1

3

一起表示旋转和平移的常用方法是使用齐次坐标向量和 4x4变换矩阵。将向量乘以矩阵同时进行旋转和平移;并且将两个矩阵相乘会为您提供一个新矩阵,该矩阵按顺序执行这两个操作,这就是您想要解决的问题。这是基本的计算机图形数学(但它对几何和物理也很有用......)。

以这种方式表示向量和矩阵可能看起来多余甚至浪费,但它使数学和编程更简单。一旦你理解了数学是如何工作的,并且有了工作代码,你就可以根据需要返回并优化掉冗余数据;但是,您可能会发现这样做不值得。


您的问题中的公式不起作用 - 您需要确定要应用偏航、俯仰和滚动的顺序,生成适当的 X-、Y- 和 Z-旋转矩阵,然后按该顺序将它们相乘(该链接为您提供了单个旋转矩阵以及组合旋转矩阵的示例)。

平移矩阵比计算旋转矩阵简单得多。将平移矩阵相乘基本上只是将平移向量相加,但是当旋转出现在图片中时,您会看到系统的优势:平移和旋转的顺序很重要,并且矩阵可以很容易地每次都正确处理。


最后,要实际解决您的问题:

  • 计算固定平台上角色的组合旋转/平移矩阵。(理想情况下,您应该使用此矩阵来绘制原始字符)
  • 计算“投影”平台的组合旋转/平移矩阵(也可用于绘制投影平台)
  • 将两个矩阵相乘以确定“投影”字符的正确矩阵

请注意,唯一需要的三角函数是采用原始滚动/俯仰/偏航角的sin()和。cos()

于 2012-08-30T18:10:20.037 回答