Ad Astra 天文原理

August 26, 2026 · View on GitHub

Ad Astra 按「观测地点 + 绝对时刻」计算当时当地的天空方向。本文说明这条计算链用到的概念:天球、时间尺度、赤道与地平坐标、恒星周日运动、太阳系天体、大气折射、月相和昼夜。

精度按科普级:让画面与肉眼所见大致相符。满月直径约 30 角分;产品把太阳和主要行星的角误差目标放在约 3 角分、月亮约 5 角分。这远宽于专业星历,也不用于望远镜指向、航海或计时。软件如何实现这些步骤,见 技术说明

1. 计算链(结论)

以「北京时间 2024 年 1 月 1 日 08:00,在北京抬头」为例,步骤对任何地点、任何时刻都相同:

  1. 读入民用地方时(时区 Asia/Shanghai,钟面 2024-01-01 08:00)。
  2. 换成 UTC:2024-01-01 00:00:00 UTC。这是唯一的绝对瞬间。
  3. 写成儒略日,得到距 J2000.0 的天数 d
  4. 确定观测者:纬度、经度(海拔按海平面)。
  5. 由世界时和经度得到地方恒星时:春分点相对当地子午圈转过了多少。
  6. 恒星:目录里的 J2000 赤经赤纬,经岁差转到「今天的赤道」,再转到地平。太阳、月亮、行星:在均匀时标上求相对地球的方向,得到视赤经赤纬,同样转到地平。月亮必须用站心位置。
  7. 靠近地平线时加上标准大气折射:天体看起来比几何位置更高一点。
  8. 每个方向得到方位角和高度角。高度角大于 0 表示在地平线以上。

同一钟面时刻改到纽约,UTC 会变,后面全部结果都会变。同一 UTC 改到悉尼,绝对瞬间不变,但南半球的地平会把许多北天星压到地下。

该瞬间在北京(约 39.90°N,116.41°E)的一组对照:

天体方位角高度角含义
太阳约 124°约 +3.3°刚升起不久,东南方低空
月亮约 258°约 +32°西南方,中等高度
木星约 4°约 −37°北方地平线以下,当时看不见

方位角从正北起算、向东增加:90° 东,180° 南,270° 西。高度角 0° 是地平线,90° 是天顶,负值在地下。

2. 画面上有什么

对象含义如何随时间变
恒星极远处的发光点,可视为钉在天球上主要随地球自转东升西落;百年尺度上还有自行
星座人为把亮星连成的图案随恒星做周日运动;连线不是物理结构
太阳太阳系中心天体每天东升西落,一年沿黄道走完一圈
月亮地球的卫星每天相对恒星东移约 13°,约 29.5 天完成一次月相
行星水星到海王星相对恒星缓慢移动,有时逆行
黄道太阳一年中的视路径相对恒星几乎固定,相对地平随季节和地点变
天赤道地球赤道平面延伸到天球上的大圆相对恒星几乎固定,相对地平随地点变
赤道网格赤经、赤纬参考线随天球转
地平网格方位角、高度角参考线钉在当地地平上,不随恒星时转
银河银盘在天球上的光带随恒星一起转

产品不包含人造卫星、彗星、小行星和深空天体目录。天体在画面上是光点或可辨认的精灵,行星不按真实角直径来画。

3. 天球

人眼分不清极远处天体的远近,只能看见方向。于是把观察者放在球心,把所有天体投影到同一个单位球面上。这个球面叫做天球

在天球上只保留方向:两颗星「靠近」是指夹角小,不一定物理上接近。计算「某颗星在哪」,就是求方向,再换成当地的方位和高度。

固定参考点:

  • 北天极 / 南天极:地球自转轴延伸到天球的两点。北天极附近目前靠近北极星。
  • 天赤道:与地球赤道共面的大圆。
  • 春分点:天赤道与黄道的一个交点,赤经的零点。
  • 天顶 / 天底:观察者正上、正下。
  • 地平圈:天顶的正交大圆,也就是当地地平线。

同一颗星在天球上的位置,对全世界几乎相同(忽略视差);它在当地天空中的方位和高度,取决于观察者站在哪里、当地是什么时刻。

4. 观测者:地点决定哪一片天在头顶

  • 纬度 φ:北纬为正。北天极的高度角约等于当地纬度。
  • 经度 λ:东经为正。决定同一时刻各地的恒星时,也就是天球已经转过多少。
  • 海拔:影响地平几何和折射。本产品按海平面处理。

直观后果:

  • 赤道上,北极星贴着北方地平线;北极点上,北极星几乎在天顶,恒星绕天顶转圈,没有东升西落。
  • 北半球看不到太靠近南天极的星;南半球看不到太靠近北天极的星。整夜不落下的叫做拱极星
  • 经度每差 15°,地方恒星时大约差 1 小时,星空转动约 15°。

观测地点回答「站在哪里抬头」;时区只回答「钟面上写的几点对应宇宙中的哪一瞬间」。

5. 时间:从钟面到天文瞬间

天体位置不等于日历上的年月日,而等于宇宙中的一个绝对瞬间。地方民用时间必须先换成这个瞬间。

5.1 几种时间

名称谁在用含义
民用地方时用户看到的日期和时间某时区钟面上的时刻,含夏令时
UTC各地民用时间的公共枢纽协调世界时
UT1地球自转由地球实际朝向定义的世界时
TT太阳系动力学均匀流逝的地球时,行星理论在这个尺度上积分
儒略日计算内部把瞬间写成一个连续的天数

规则:

  1. 用户输入的永远是某时区的民用地方时。
  2. 先换成 UTC,得到绝对瞬间。
  3. 恒星的周日运动跟地球自转有关,用世界时即可。
  4. 太阳、月亮、行星的轨道运动需要更均匀的 TT。
  5. 画面上再把 UTC 格式化回用户选择的时区。

不能拿「本地 Date 的时、分、秒」直接当天文输入。同一串 20:00,在北京、伦敦、纽约对应完全不同的瞬间。

5.2 时区与夏令时

民用地方时依赖 IANA 时区,例如 Asia/ShanghaiEurope/LondonAmerica/New_YorkAustralia/Sydney。时区包含标准偏移、夏令时,以及历史上改过的边界。

两件必须单独处理的异常:

  • 重复的地方时:秋令时拨慢 1 小时,某个钟面时刻对应两个 UTC。需要明确取较早或较晚的一个。
  • 不存在的地方时:春令时拨快 1 小时,某个钟面时刻没有对应的 UTC。应拒绝这次输入,而不是自动挪到下一小时。

1970 年以前的历史时区并不完整;未来的夏令时立法也无法预知。这些情况下,钟面时刻只能解释为按现行规则外推的近似民用时间。

观测地点和显示时区可以分开:人在东经 120° 的海上,钟面仍可显示 UTC。计算天空用的是经纬度和绝对瞬间,不是时区名字。

5.3 UTC、UT1 与 TT

地球自转并不完全均匀:

  • UTC:民用标准,通过闰秒尽量贴住 UT1。
  • UT1:地球实际朝向。恒星时本质上跟 UT1 走。
  • TT:均匀原子时间。太阳系位置理论在 TT 上计算。

TT 与世界时之差记为 ΔTTT ≈ UT + ΔT。21 世纪初大约是 70 秒量级。70 秒造成的地球自转角约为 0.3 角分,远小于月亮圆面。现行规则下 UT1 与 UTC 通常相差不到 1 秒。

因此科普展示可以近似 UT1 ≈ UTC,并用模型估算 ΔT,不必每次下载地球定向实测文件。这保证「今晚抬头看到的位置」正确,但不保证角秒级测量。

5.4 儒略日

几乎所有天文计算都把瞬间写成儒略日(JD):从公元前 4713 年 1 月 1 日正午起算的连续天数,含小数。

JD = utcMillis / 86_400_000 + 2_440_587.5

2_440_587.5 是 1970-01-01 00:00 UTC 的儒略日。J2000.0 标准历元是 JD 2_451_545.0,即 2000-01-01 12:00 TT。距 J2000.0 的天数:

d = JD - 2_451_545.0

恒星时、岁差都可以用 d 展开。

6. 坐标系

要把目录里的位置变成抬头看到的位置,需要经过几层坐标:

恒星目录 / 行星理论
    → 赤道坐标(赤经、赤纬)
    → 日期赤道坐标(岁差之后「今天的赤道」)
    → 地平坐标(方位角、高度角)
    → 观察者的视线方向

6.1 赤道坐标

  • 赤纬 δ:类似纬度,从天赤道量起,北正南负,−90° 到 +90°。
  • 赤经 α:类似经度,从春分点向东量。习惯用时:24 时 = 360°,1 时 = 15°。

赤道坐标几乎不随观察者地点改变,所以星表都用它出版。写成天球单位方向(x 指向春分点,z 指向北天极):

x = cos(δ) * cos(α)
y = cos(δ) * sin(α)
z = sin(δ)

α 先由时换成弧度:α = 赤经时数 × 15°

6.2 岁差与章动

地球自转轴在缓慢摆动:

  • 岁差:地轴大约 26,000 年绕一圈,春分点沿黄道西移。J2000 的赤经赤纬,到 2100 年会有大约 1.4° 的系统偏移。
  • 章动:较小的周期性摆动,主要周期约 18.6 年,幅度大约 9 角秒。对科普画面通常小于一个月亮直径的百分之一。

星表通常给出 J2000 / ICRS 坐标;算某一天的天空时,要转到日期赤道坐标。对肉眼星空,岁差是百年尺度上必须考虑的项。本产品把亮星在当前年份前后约 200 年内的角误差目标放在约 5 角分。

6.3 地平坐标

钉在观察者身上:

  • 高度角 a:从地平线向上,0° 在地平,90° 在天顶,负值在地下。
  • 方位角 A:从正北起算,向东增加。

对应的地平单位向量(与画面一致:+X 西,+Y 天顶,+Z 北):

x = -cos(a) * sin(A)    西
y = sin(a)              天顶
z = cos(a) * cos(A)     北

反过来:a = arcsin(y)A = atan2(-x, z) 再折算到 0°–360°。把东放到 +X 会左右镜像。

地平坐标随地球自转快速变化:一夜之间东升西落。

6.4 地方恒星时

恒星时回答:春分点此刻在当地子午圈以东多远。从 J2000.0 展开的常用近似(单位为恒星时小时):

GMST ≈ 18.697374558 + 24.06570982441908 × d
LST  = (GMST + λ / 15)  mod 24

d 是从 J2000.0 起算的世界时天数,λ 是东经(度)。系数大于 24,是因为地球在公转:太阳日比恒星日长约 4 分钟。恒星日约 23 小时 56 分,所以星空每天提前约 4 分钟升起。

一颗星的时角 H = LST − α。H = 0 表示这颗星在子午圈上,此时高度角最高。

6.5 赤道转到地平

sin(a) = sin(φ) sin(δ) + cos(φ) cos(δ) cos(H)

sin(A) = −cos(δ) sin(H) / cos(a)
cos(A) = (sin(δ) − sin(φ) sin(a)) / (cos(φ) cos(a))

φ 是纬度。实际求方位角用 atan2,避免象限错误。等价地:把赤道单位向量乘上由 LST 和纬度决定的旋转,直接得到「西、天顶、北」。这个旋转只依赖时间和地点,同一瞬间所有恒星共用。

6.6 黄道

黄道是地球公转轨道平面延伸到天球上的大圆,也是太阳一年中的视路径。它与天赤道的交角是黄赤交角 ε,J2000 平黄赤交角约 23.439°。正是这个交角造成四季:太阳赤纬一年中大约在 −23.4° 与 +23.4° 之间变化。

黄纬为 0 时,黄经 λ 与赤经赤纬的关系:

tan(α) = sin(λ) cos(ε) / cos(λ)
sin(δ) = sin(ε) sin(λ)

太阳的几何黄纬接近 0,几乎严格走在黄道上。月亮和行星有小的黄纬,会离开黄道一小段,但肉眼仍大致沿黄道带运动。黄北极、黄南极在黄纬 ±90°,J2000 约在赤经 18h / 6h、赤纬 ±(90° − ε)。

7. 恒星

目录至少给出某一历元(通常 J2000)的赤经、赤纬和视星等。恒星距离极远,同一瞬间从地球各地看去方向几乎相同,不必做站心视差。这与月亮相反。

恒星并非绝对静止。投影到天球上的缓慢位移叫做自行。对大多数肉眼可见恒星,一个世纪只有角秒到一两角分;近距快星(如巴纳德星)例外。百年尺度上可写成:

$\text{text} \text{p}(\text{t}) = \text{normalize}( \text{p0} + (\text{dp}/\text{dt}) \times Δ\text{t} ) $

对观察者来说,最显著的运动不是自行,而是地球自转造成的周日运动:从东方升起,在子午圈达到最高,从西方落下。整个天空约 23 小时 56 分转一圈。北纬 φ 处,赤纬大于 90° − φ 的星永不落下;赤纬小于 φ − 90° 的星永不升起。

季节变化来自太阳在黄道上的移动:某个星座在「傍晚刚黑」时出现在南天的日期,大约每月提前两小时,因此有四季星空。

国际天文学联合会认定 88 个星座。正式定义的是天球上的边界;人们熟悉的连线是文化约定,不同星图可以画得不一样。星座名称取所用恒星方向的平均,再归一化到天球上,因此名称随星空一起转,而不是钉在屏幕某一像素。

8. 太阳、月亮和行星

恒星可以当作钉在天球上的点;太阳系天体必须对每一个绝对瞬间重新求方向。需要的是从观察者指向天体的单位方向,以及视星等、月亮相位、土星光环倾角等附加量。

概念步骤:

  1. 在 TT 上求地球和目标天体相对太阳的位置。
  2. 相减得到天体相对地球的矢量。
  3. 扣除光行时(光从天体走到地球的时间),再迭代一次。
  4. 加上光行差、岁差、章动,得到视赤经赤纬。
  5. 转到当地地平坐标。靠近地平时加上标准折射。

太阳每天沿黄道东移约 1°,一年回到春分点。

地心以地球中心为原点,对恒星和大多数行星足够。站心以地表观测者为原点。月亮离地球只有约 60 个地球半径,不同地点看到的方向可差 1° 左右,这就是月球视差。计算月亮必须用站心,否则它会整体偏高或偏低,靠近地平线时尤其明显。

从地球上看,行星大致沿黄道移动:

  • 顺行:相对恒星向东,这是常见状态。
  • 逆行:冲或内合前后暂时向西退,是两个绕日轨道的投影,不是行星真的折返。
  • :与太阳同一方向,淹没在晨光或暮光里。
  • :地外行星与太阳黄经相差 180°,整夜可见,通常最亮。

水星和金星是地内行星,永远在太阳附近摆动。火星、木星、土星可以在半夜出现在南天。天王星、海王星肉眼几乎不可见,产品中仍作为太阳系天体显示。

月亮绕地球约 27.3 天相对恒星一周(恒星月),约 29.53 天相对太阳一周(朔望月)。后者决定月相。轨道相对黄道倾斜约 5°,只有在交点附近才可能日食或月食。月亮每天相对恒星东移约 13°,升起时刻大约每天推迟 50 分钟。

9. 大气折射

真空中的几何高度角不是眼睛看到的高度角。光线进入大气后向下弯曲,天体看起来更高:

  • 天顶附近折射接近 0。
  • 地平线附近标准大气下可达约 34 角分,差不多一个太阳或月亮的直径。
  • 所以几何上还在地平线以下一点的太阳,肉眼已经能看见日出。

标准模型假设海平面、典型温度和气压。真实天气、地形和海拔都会改变结果。地平线以下很深的对象,不应被折射「抬」到可见区域。这项改正不纳入与实验室星历对比的严格误差预算。

10. 辅助线

这些线不对应实体,用来理解天空如何被坐标切开。

  • 天赤道:赤纬为 0 的大圆。与地平线的交点大致在正东和正西附近(忽略折射)。它在南天或北天升起的最高高度等于 90° − |φ|
  • 黄道:黄纬为 0 的大圆。太阳永远贴近这条线;月亮和行星在其两侧不远。黄道相对地平线的倾角随季节和纬度变化,「黄昏后黄道竖起来」或「躺在地平线上」会随日期明显不同。
  • 赤经 / 赤纬网格:画在天球上,随恒星时转动。适合对照星图。
  • 方位 / 高度网格:画在当地地平上,不随恒星转。适合回答「那颗星在东偏南多少、仰角多少」。

大圆应沿球面细分,否则长弦会穿进天球内部,看起来像直线抄近路。

11. 视星等、颜色和可见度

视星等度量看起来有多亮。数值越小越亮:太阳约 −27,满月约 −13,金星最亮时约 −4.5,天狼星约 −1.5,织女星大约 0。良好暗夜肉眼大约可以看到 +6 到 +6.5。

相邻 1 等,亮度相差约 2.512 倍;5 等相差 100 倍。产品用视星等上限筛选恒星:上限 5.5 表示只画出不暗于 +5.5 的星。太阳、月亮、行星不参与这道筛选。

恒星颜色来自表面温度。白昼时大气散射会淹没暗星。太阳越高,只剩更亮的天体还留在视觉上。这是光学可见度,不是天体白天不存在。

12. 月相

月相取决于太阳、月亮、地球的相对位置,也就是被太阳照亮的那一面朝向地球多少。一个朔望月里,月亮相对太阳的黄经差从 0° 走到 360°:

黄经差名称形态
新月几乎看不见,与太阳同升同落
45°娥眉月细弯,傍晚西天
90°上弦月右半亮(北半球常见观感),傍晚在南天
135°盈凸月大部分被照亮
180°满月整夜可见,太阳落下时升起
225°亏凸月开始亏缺
270°下弦月左半亮,后半夜到清晨
315°残月细弯,黎明东天

照明比例还取决于轨道倾角和观察几何;科普展示用相位角或被照亮比例已经足够。南北半球看到的月面会上下颠倒,盈亏的物理定义不变。

13. 昼夜与曙暮光

天空亮暗不取决于钟面几点,而取决于太阳的高度角

太阳高度角阶段含义
≥ 0°白昼太阳在地平线上
0° 到 −6°民用曙暮光户外活动仍可不用人工照明
−6° 到 −12°航海曙暮光海天线可辨,亮星出现
−12° 到 −18°天文曙暮光天空仍未完全暗到观测极限
< −18°夜晚太阳散射可忽略

这些边界是连续过渡。极地夏季可能极昼(太阳高度整天为正),冬季可能极夜。这由纬度和太阳赤纬共同决定,不需要单独的「极地模式」。春分秋分全球昼夜大致等长;北半球夏至白昼最长——这是黄赤交角的直接结果。

14. 运转规律总览

用户拖动时间时看到的全部变化,是下面几层运动叠在一起。

以小时计:地球自转。 整个天空绕天极转。恒星、星座、黄道、天赤道一起转;地平线和方位网格不动。太阳、月亮、行星也跟着转,但相对恒星还有自身的慢漂移。播放一夜应看到东升西落,而不是天体在星座之间乱跳。

以日到月计。 太阳每天沿黄道东移约 1°,约 365.24 日回到春分点,造成季节和「同一地方时看到的星座」变化。月亮每天东移约 13°,约 29.5 日完成月相。

以月到年计。 行星相对黄道带缓缓移动,偶有逆行。木星约 12 年绕黄道一周,土星约 29 年。按年跳转时,背景恒星几乎没动(除周日相位),行星会换星座。

以十年到百年计。 亮星图案大体依旧;高自行近星会相对邻星挪动;岁差让春分点移动,北极附近的「北极星」在更长尺度上也会换星星。产品覆盖当前年份前后约 200 年:周日运动和行星运动是主角,自行是配角。

地点变化,绝对时间不变。 改纬度:北天极高度改变,可见星座集合改变。改经度:相当于换了一个恒星时,东边的地点看到更「晚」的那一幕。改半球:方位习惯仍然是北为零向东增加,但许多熟悉的北天星座会落到地平线下。

保持钟面时刻不变、改时区或改城市,则先要换算成不同的 UTC,再走完整条计算链。这与「同一 UTC、不同地点」不是同一件事。

15. 精度边界

  • 太阳和主要行星:与高精度星历相比,角误差目标不超过约 3 角分。
  • 月亮:不超过约 5 角分。月球视差必须计入。
  • 亮星:当前年份前后 200 年内,不超过约 5 角分。
  • 黄道、天赤道在视觉上应与坐标定义一致。
  • 地平线附近的大气折射使用标准模型,不包含当地气象改正。
  • 不宣称角秒级,不用于望远镜指向、航海或计时。

3 到 5 角分在全天画面上几乎看不出来,但已经远宽于专业星历。

16. 术语

  • 天球:以观察者为心、表示方向的假想球面。
  • 天顶 / 地平线:当地正上方,以及天空与地面的界线。
  • 赤经 / 赤纬:天球赤道坐标系,类似经纬度。
  • 方位角 / 高度角:当地地平坐标系。
  • 春分点:赤经零点,天赤道与黄道的一个交点。
  • 黄道 / 黄赤交角:太阳视路径,以及它与天赤道的交角,约 23.4°。
  • 地方恒星时:春分点相对当地子午圈的时角。
  • 时角:天体相对当地子午圈的角距。
  • 儒略日:连续计数的天文日期。
  • UTC / UT1 / TT:民用世界时、地球自转时、均匀地球时。
  • ΔT:TT 与世界时之差。
  • 岁差 / 章动:地轴的长期进动与周期摆动。
  • 自行:恒星在天球上的缓慢位移。
  • 地心 / 站心:以地心或以地表观测者为原点。
  • 视差:因观测者位置不同造成的方向差,月亮最显著。
  • 光行时:光线从天体传到地球所用的时间。
  • 视星等:看起来有多亮,越小越亮。
  • 朔望月:月相循环周期,约 29.53 日。
  • 拱极星:某纬度永不落下的星。
  • 冲 / 合 / 逆行:行星相对太阳或相对恒星的特征视位置与视运动。
  • 民用 / 航海 / 天文曙暮光:由太阳高度角 −6°、−12°、−18° 划分的晨昏阶段。
  • 历元:坐标所对应的参考时刻,常用 J2000.0。