我正在尝试创建一个非常基本的行星运动(太阳,地球月亮表示为立方体)。

就目前而言,我设法将一个立方体移动到另一个立方体上,但是我有以下问题……什么是在已经移动的立方体周围移动另一个立方体(例如月亮)的最佳方法?

我使用简单的操作ex使它们运动。在x轴上移动:

d * Math.sin(x * Math.PI / 180.0)

d是距中心或投影的距离(不知道我是否正确使用了该术语)。
我曾考虑过通过计算已经旋转的立方体的距离并添加一些参数来放置“卫星”,但不知道如何使该行星像旋转中心的“参考”一样...

最佳答案

您可以通过创建转换组合来实现。假设您想绕一颗中心恒星绕行星运行。首先,行星进入轨道,即沿x方向平移:

orbit_distance = translation_orbit · planet_center


然后围绕中心旋转。

orbit_position = rotation_orbit · orbit_distance


或者,您可以将其写成一行

orbit_position = rotation_orbit · translation_orbit · planet_center


重要的是,操作顺序很重要,先旋转然后平移与先平移然后旋转不同。或者,用数学术语来说,几何变换不是可交换的。

在3维空间中,所有线性变换都可以通过4维同质坐标集中的线性方程来描述。即您可以使用4×4矩阵表示各种线性几何变换。

绕行星绕太阳旋转的旋转月亮:

R_orbit_planet · T_orbit_planet · R_orbit_moon · T_orbit_moon · R_rotation_moon

10-05 20:58
查看更多