我们如何还原一片夜空
一张星空图其实是三个问题叠在一起:天上有哪些星;那一刻半个天球怎样对着你所在的位置;以及怎样把一个半球压平到纸上。下面逐个说明。
一、我们画哪些星
我们绘制 HYG 星表中亮于 5.5 等的恒星。该星表整合了耶鲁亮星星表、依巴谷(Hipparcos)与第谷-2(Tycho-2)的天体测量数据。它们的 J2000 赤经赤纬会按 IAU 1976 岁差表达式(Meeus《天文算法》第 21 章)换算到你指定日期的平春分点。
我们刻意不做自行改正:1900 至 2100 年间,一颗典型恒星的自行位移远小于 0.01 度,在成图上不足一个像素。星点大小按视星等、颜色按 B-V 色指数,所以参宿四会画成橙色,参宿七是蓝白色。
二、那一刻你面对的是哪半边天
这由一个数字决定:当地视恒星时。我们先按 IAU 1982 序列算出格林尼治视恒星时,再加上你的东经度数,得到的就是此刻正在过你子午圈的赤经。
有了它,每颗星的时角通过标准球面变换给出高度角与方位角。你输入的钟表时间会按该年份的历史时区偏移换算,因此那一年的夏令时规则是被正确处理的。
三、把半球压平
我们使用球心在天顶、地平圈正好落在圆盘边缘的立体投影。它是保角的,因此猎户座或南十字座的形状不会被拉歪 —— 直接把高度角对方位角作图是做不到这一点的。
圆盘沿用印刷星图的约定:上方为北,左侧为东。那是你仰面躺下看天时的朝向,也正因如此,图上的星座和你抬头看到的才一致,而不是和地图一致。
四、月亮与行星
月亮采用 ELP2000-82B 截断月球理论,太阳采用 Meeus 第 25 章的视黄经级数,水星到土星采用完整的 VSOP87 级数,并做了光行时与周年光行差改正。
这与我们的本命盘计算器使用的是同一套级数,在那里它们与 NASA JPL Horizons 的比对误差小于 1 角分。计算中包含黄纬,所以月亮标记会落在黄道正确的一侧。
五、银河光带
圆盘上那道柔光来自银道坐标系:我们描出等银纬的圆环,和其余内容一起投影。它标示的是银河经过的位置,而不是当时的亮度。
这是视觉近似,不是测光结果 —— 位置正确,但只是装饰。
数据来源与参考文献
- HYG 星表(整合依巴谷、耶鲁亮星星表与第谷-2 天体测量数据),随 three-starmap 以 MIT 协议发布。
- d3-celestial 星座连线数据,BSD-3-Clause 协议。
- Meeus, J.《天文算法》第 2 版(Willmann-Bell, 1998):第 12、21、22、25、32 章。
- VSOP87 行星理论(Bretagnon & Francou, 1988)与 ELP2000-82B 月球理论(Chapront-Touze & Chapront, 1983),经由 astronomia 库实现。
这张图是什么,不是什么
它是一张几何上正确的星图:恒星位置、天球旋转和投影都是算出来的,不是手绘的。但它不是照片。大气折射会把地平附近的星抬高最多半度,城市灯光会吞掉暗于约 4 等的星,银河也只是一条风格化的光带。如果你想知道某一颗暗星那一夜是否肉眼可见,这张图只能告诉你它在哪里,不能告诉你你看不看得见。