我正在尝试创建一个非常基本的行星运动(太阳,地球月亮表示为立方体)。
至于现在,我设法将一个立方体移动到另一个立方体,但我有以下问题......在已经移动的那个周围移动另一个立方体(例如月亮)的最佳方法是什么?
我使用简单的操作ex。在x轴上移动:
d * Math.sin(x * Math.PI / 180.0)
其中d是距离中心或投影的距离(不知道我是否使用了这个术语)。 我想通过计算已经旋转的立方体的距离并添加一些参数来放置“卫星”,但不知道如何使该行星成为旋转中心的“参考”......
答案 0 :(得分:3)
您可以通过创建转换组合来完成此操作。假设你想围绕中心恒星绕行星运行。首先,行星进入轨道,即x方向的平移:
orbit_distance = translation_orbit · planet_center
然后围绕中心旋转。
orbit_position = rotation_orbit · orbit_distance
或者,你可以写一行
orbit_position = rotation_orbit · translation_orbit · planet_center
重要的是,操作顺序重要,首先旋转然后平移与首先翻译然后旋转不同。或者,在数学术语中,几何变换不是可交换的。
在三维空间中,所有线性变换可以通过4维同构坐标集中的线性方程来描述。即你可以使用4×4矩阵来表达各种线性几何变换。
旋转绕着绕太阳旋转的行星的旋转月亮:R_orbit_planet · T_orbit_planet · R_orbit_moon · T_orbit_moon · R_rotation_moon