【发布时间】:2019-04-12 21:59:26
【问题描述】:
我需要计算 3D 对象面对任意 3D 点的 2 个角度(偏航角和俯仰角)。这些旋转被称为“欧拉”旋转,因为在第一次旋转之后(假设 Z,基于下图),Y 轴也随着对象旋转。
这是我正在使用的代码,但它不能完全工作。在地平面 (Y = 0) 上,对象正确旋转以面对该点,但只要我在 Y 中向上移动该点,旋转看起来就不正确。
// x, y, z represent a fractional value between -[1] and [1]
// a "unit vector" of the point I need to rotate towards
yaw = Math.atan2( y, x )
pitch = Math.atan2( z, Math.sqrt( x * x + y * y ) )
你知道如何计算给定一个点的 2 个欧拉角吗?
下图显示了我旋转的方式。这些是我需要计算的角度。 (唯一的区别是我按 X、Y、Z 的顺序旋转对象,而不是 Z、Y、X)
这是我的系统。
- 坐标系是 x = 向右,y = 向下,z = 更靠后
- 默认情况下,对象位于 (0,0,1) 处,面向后
- 旋转的顺序是 X、Y、Z,其中在 X 上的旋转是俯仰,Y 是偏航,Z 是滚动
【问题讨论】:
-
当您说“在 Y 中向上移动对象”时,您的意思是“在 Y 中向上移动点”吗?物体在旋转前朝向哪个方向?
-
@Beta - 是的,我就是这个意思。对象在旋转前朝后,就像站在桌子上一样。
-
你好@Robinicks,你能告诉我你在哪里拍的照片i53.tinypic.com/33lo6jp.jpg好吗?
-
@GennaroArguzzi - 我在 Adobe Flash 中设计了该图形
-
你好@Robinicks,我参考了上面那个,请看上面的链接。
标签: math 3d rotation angle euler-angles