时间与太阳、月亮和地球的关系

1、写在前面

GoldTime 工具是我大概20年前写的,主要用于对时间进行换算,解决GPS周、秒与我们习惯的年月日的对应问题,那是刚开始从事GPS定位算法的研究,正做硕士论文,开始学习C++,学习面向对象,程序猿一点点的开始成长了…
时至2020,疫情期间,宅家天天看时间,辅导孩子作业,偏偏有一个内容需要透过窗户观察太阳和月亮的变化,五年级的小娃娃,听不懂理工老爸的讲解(开来不能当老师),算了吧,换个思路,拿绝招,会编程的老爸,写个程序,动态转起来,就能明白太阳、地球和月亮的关系了吗…

2 、需求

  1. 需要显示太阳、月亮和地球的三体关系
  2. 需要显示太阳、月亮的高度和方位

3、分析和算法

该问题看似简单,需要相当多的天文知识。包括:
太阳、地球、月球的三体关系
时间系统
地球自转
历法
球面三角计算
相关知识可以查阅《简易天文学》, Jean Meeus写的《Astronomical Algorithms 》。

我们生活的宇宙是一个时间单向的系统,所有的东西都烙在时间轴上,因此,时间才是最关键的东西,我想起了十几年前写的小工具程序,为了省时间,改改得了吧。
(1)三体关系计算
需要计算太阳黄道坐标系中地球、月亮的黄经和黄纬,计算方法有近似的也有精度较高的,近似的,实际搞两个椭圆就可以,大家参考《简易天文学》和高中解析几何即可。高精度的计算可以采用VSOP87和ESP3000月球理论,这两个都是办解析方法,直白点,大家都在时间轴上跑吗,不就是f=f(t)吗,搞个时间函数拟合一下就行吗,反正行星的运动都是解析的。本软件的算法全部来自 Jean Meeus 写的《Astronomical Algorithms 》。
(2)高度角、方位角的计算
方位是人定的,搞地理信息的和搞天文的习惯不一样,方位起点的定义不同。一个以北为起点,一个以南为起点,不过编程的人都行。

关键是在球面上计算角度的关系,不习惯球面三角的人,还真不好理解球面三角公式。
不太好画图,把手稿贴上吧(偷个懒)。
时间与太阳、月亮和地球的关系

4、软件界面

时间与太阳、月亮和地球的关系

5、功能说明

(1)以儒略日为引数,计算各种时间相关的内容
(2)显示三体系统简图
(3)显示高度角和方位角,(搞GNSS的人,很熟悉这个界面,不过增加了地平线以下的高度角,深色部分)。
(4)动态显示,搞个时钟就行了。

6、扩展

(1)可以计算太阳和月亮每天升起和降落的时间,计算高度角为0的时刻。
(2)可以计算阴历日历,需要学习咱们阴历的历法和规定
(3)可以计算月相的变化等。