我有一个在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 = ?;
答案 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。确保使用单位矢量。