计算在3D中以圆周运动移动的对象的位置

时间:2010-08-04 15:48:29

标签: math 3d

我有一个在3d空间中进行圆周运动的物体,中心或圆圈位于x:0,y:0,z:0半径是一个变量。我知道物体在圆圈上的位置(通过它的角度[让我们称之为ar]或它所移动的距离)。圆圈可以在所有3个方向上倾斜,所以我有三个角度变量,让我们称它们为ax,ay和az。现在我需要计算物体在太空中的确切位置。我需要它的x,y和z坐标。

float radius = someValue;
float ax = someValue;
float ay = someValue;
float az = someValue;
float ar = someValue; //this is representing the angle of the object on circle

//what i need to know
object.x = ?;
object.y = ?;
object.z = ?;

2 个答案:

答案 0 :(得分:4)

您需要提供更多信息才能获得准确的公式。答案取决于您应用旋转的顺序,旋转的方向以及圆的起始方向。此外,考虑到一次旋转,计算物体的位置会容易得多。

那么,如果所有旋转都是0,那么你的对象在哪里?

我们假设它在(r,0,0)。

伪代码将类似于:

pos0 = (r,0,0)
pos1 = pos0, rotated around Z-axis by ar  (may not be Z-axis!)
pos2 = pos1, rotated around Z-axis by az
pos3 = pos2, rotated around Y-axis by ay
pos4 = pos3, rotated around X-axis by ax
如果一切正确,

pos4将成为object的位置。如果您在设置时遇到问题,请尝试保持ax = ay = az = 0并担心ar,直到您做对了。然后,一次开始设置其他角度并更新公式。

每个rotation都可以使用

执行
x' = x * cos(angle) - y * sin(angle)
y' = y * cos(angle) + x * sin(angle)

这是Z轴上的旋转。要在Y轴上旋转,请使用z和x而不是x和y等。另请注意,角度在此处为弧度。您可能需要对某些旋转使角度为负(取决于ar, ax, ay, az的方向)。

你也可以用矩阵乘法来完成这个旋转,就像Marcelo说的那样,但这可能对你的项目来说太过分了。

答案 1 :(得分:3)

使用rotation matrix。确保使用单位矢量。