您可以使用这些方程式在 2D 中旋转某些东西(请参阅Wikipedia):
x' = x * cos(angle) - y * sin(angle)
y' = x * sin(angle) + y * cos(angle)
您可以使用基本相同的方程来绕 3D 中的 x/y/z 轴旋转,例如绕 y 轴旋转:
x' = x * cos(angle) - z * sin(angle)
y' = y
z' = x * sin(angle) + z * cos(angle)
我想你想做的是:
- 绕 y 轴旋转 yRotation
- 然后绕x轴旋转xRotation
您已经完成了 y 轴旋转。所以从 (x, y, z) = (radius, 0, 0) 开始,你已经完成了:
x' = x * cos(angley) - z * sin(angley) = radius * cos(angley)
y' = y = 0
z' = x * sin(angley) + z * cos(angley) = radius * sin(angley)
我们只需要再次应用方程来绕 x 轴旋转:
x'' = x' = radius * cos(angley)
y'' = y' * cos(anglex) - z' * sin(anglex) = -radius * sin(angley) * sin(anglex)
z'' = y' * sin(anglex) + z' * cos(anglex) = radius * sin(angley) * cos(anglex)
请注意,调整“y 轴”旋转不一定会使卫星绕 y 轴旋转(例如,如果您的 x 旋转为 90 度,那么调整 y 旋转实际上会绕 z 轴旋转)。如果您不喜欢这种行为,我建议您只存储卫星 (x, y, z)(相对于被跟踪对象)并直接调整它(您可能希望在每次调整后重新归一化以确保浮动点不准确不会使您的卫星漂移)。