Sun_Earth_Moon System的宗旨在于模拟太阳系中太阳、地球和月球的运动轨迹,以及观察地球和月球的光照情况。实现的功能有:
- 太阳自转
- 地球绕太阳公转
- 地球自转
- 月球绕地球公转
- 月球自转
- 太阳光照
-
太阳自转
使用rotate函数使太阳绕自身中心所在的Z轴旋转,具体旋转参数请参照
Sun_Earth_Moon.m
中相应的代码和注释。 -
地球绕太阳公转
使用rotate函数使地球绕太阳中心所在的Z轴旋转,具体旋转参数请参照
Sun_Earth_Moon.m
中相应的代码和注释。 -
地球自转
使用rotate函数使地球绕自身中心所在的Z轴旋转,具体旋转参数请参照
Sun_Earth_Moon.m
中相应的代码和注释。 -
月球绕地球公转
这一部分较为复杂,因为月球在绕地球公转的同时,地球也在绕太阳公转,所以无法使用rotate函数。我才用的方法是使用
lunar_orbit
函数计算当前帧情况下月球的具体坐标,并刷新月球的位置坐标,使其达到了一种“绕地球公转”的效果。换言之,我实际上计算出了月球相对太阳运动的轨道。具体计算坐标的过程请查看
lunar_orbit
.m,里面包含了详细的解释。 -
月球自转
使用rotate函数使月球绕自身中心所在的Z轴旋转,具体旋转参数请参照
Sun_Earth_Moon.m
中相应的代码和注释。 -
光照
由于没能找到matlab中实现面光源的方法,我在太阳表面的六个位置设置了点光源(将代表太阳的球体放入一个边长与它的直径相等的立方体内,二者接触的六个点),并提高了太阳曲面的透明度,尽量在提供光照的前提下不影响太阳的观感。具体参数请参照
Sun_Earth_Moon.m
中相应的代码。
- 为了提供更好的观感,太阳的大小以及太阳到地球的距离都缩小了很多;
- 为了便于计算,星球的运行轨迹近似为正圆;
- 为了便于计算,没有考虑星球的轨道面的夹角。