ZODIAC 星轨终端

终端 · 关于 · 计算方法

METHOD

计算方法

这一页把所有「数字是怎么来的」写清楚。任何人都可以用同样的输入复算出同样的结果。

1. 行星位置

使用 astronomy-engine 计算地心视黄经,转换为当日真黄道(ECT)坐标, 再按每 30 度一个星座换算成星座与度数。示例(构建时快照):太阳 天蝎座6.74°、月亮 巨蟹座1.16°、水星 天蝎座18.48°(逆行)、金星 天秤座27.20°(逆行)、火星 狮子座17.69°、木星 狮子座24.10°。

2. 逆行判定

取行星在时刻 T 与 T+12 小时的黄经差。黄经变化为负即判定为逆行。 这是占星学的通行判定法,与天文台「视运动」口径一致。

3. 月相

月相角 = 月亮黄经 − 太阳黄经(归一化到 0–360°)。0° 为新月、90° 为上弦、180° 为满月、270° 为下弦; 被照亮比例 = (1 − cos(月相角)) / 2。月龄 = 距上一次新月的天数。

4. 相位

相位是两个天体的黄道夹角。本站使用:合相 0°(容差 8°)、对冲 180°(8°)、三分 120°(6°)、 四分 90°(6°)、六分 60°(4°)、梅花 150°(3°)。误差取夹角与标准角之差的绝对值。

5. 星座指数(重要:这不是预测)

指数用于把「今天的天象对各星座的相对影响」量化,公式完全公开:

  1. 基础分 66;
  2. 今日月亮所在星座与该星座的相位关系:同宫 +8、三分 +6、六分 +4、四分 −6、对冲 −5、梅花 −1,再乘 1.2;
  3. 金星、木星、火星、土星、水星与该星座中点(星座第 15 度)的相位:柔和相加分、硬相减分,按误差线性衰减;
  4. 每颗逆行行星 −0.9;
  5. 加一个由日期与星座序号确定的、可复现的 ±2 修正项;
  6. 结果限制在 42–97 之间。

指数是一个相对量,不是概率,也不是预测。它只表示「与其它星座相比,今天的天象对这个星座更顺还是更卡」。

6. 上升星座与宫位

上升星座用量角公式计算:由出生时刻的格林尼治恒星时换算本地恒星时,结合出生地纬度与黄赤交角(23.4393°), 求出东方地平线与黄道的交点。宫位使用整宫制:以上升星座为第一宫起点,每 30 度一宫。 天顶(MC)由本地恒星时与黄赤交角求得。

7. 误差与边界

  • 太阳/月亮黄经:0.0091° / 0.0369°(独立实现交叉校验);其余行星未独立复算;
  • 月相时刻:< 5 分钟;节气时刻:< 15 分钟(由位置误差换算);
  • 上升星座:取决于出生时间精度,时间误差 4 分钟 ≈ 度数误差 1°;
  • 星座日期边界:以太阳真实进入星座的时刻为准,与通行的「固定日期表」可能有 ±1 天差异。

8. 交叉校验(可复现)

我们不相信「官方精度」这一句话,所以另外用一套独立实现(纯 Python 复写 Meeus 算法)对 2026 全年 365 天做了比对:

天体平均误差最大误差样本
太阳0.0034°0.0091°365 天(00:00 UTC)
月亮0.0145°0.0369°365 天(00:00 UTC)

两套实现互相印证,误差远小于占星判读所需的精度(星座边界以 30° 为单位)。 这个校验只覆盖太阳与月亮,行星位置依赖同一库、未做独立复算——我们把没做的部分也写在这里。

复现命令:node build/dump_lon.cjs 2026-01-01 365 与 python build/verify_ephemeris.py。

9. 月运指数(与日运不是同一套算法)

日运指数看月亮(2.3 天一换),月运指数看慢速行星(木星、土星、天王星、海王星、冥王星)—— 它们一个月内几乎不动,所以月与月之间才有差异。

具体做法:取每颗慢星所在的星座,与该星座做星座级关系判断(不要求精确度数),按下表加权, 基准 62 分,再加上「该月每日指数均值相对 70 的偏离 × 0.3」作为修正,结果限制在 40–95。

关系同宫三分六分四分冲梅花
系数+1.9+1.6+1.1−1.5−1.1−0.35

行星权重:木星 2.4、土星 2.0、天王星 1.4、冥王星 1.2、海王星 1.0。

为什么不用「每日指数求平均」当月运:月亮 28 天里换 11 个星座,平均下来所有星座都会收敛到同一个数 (实测 12 个星座全是 71–72)。那不是判断,是算术噪声。这条我们试过并放弃了。

为什么不用精确度数相位:5 颗慢星对 12 个星座中点、配 3–8 度容差,大多数组合根本不会成立, 结果会全部落回基准分(实测 62–63,只有两个取值)。星座级关系才是这个场景该用的粒度。

10. 合盘指数

合盘(synastry)不把两张盘当成一个星座来看,而是逐对比对:A 的 10 颗行星 × B 的 10 颗行星 = 100 组, 逐组求相位。容差比本命盘收窄 1 度(合/冲 7°、三/四 5°、六 3°),因为跨盘的相位密度天然更高。

指数 = 52 + 柔和相位(三分/六分)×2.2 + 合相 ×0.7 − 张力相位(四分/冲)×1.7,结果限制在 20–96。

六组关键互动(太阳×月亮、月亮×月亮、金星×火星、太阳×金星、月亮×金星、水星×水星)不按误差排名, 而是按占星传统的重要性预先挑出来,并使用标准容差而不是收窄后的容差——否则经常六组里五组都是「无相位」, 那样等于什么都没说。有相位的排前面,无相位的显示真实角距。

它不是什么:不是关系成功率的预测,也不是「合就继续、不合就分」的依据。 它衡量的是「这段关系自动运转的成本」,剩下的要靠沟通。

11. 月亮星座与上升的查询口径

月亮位置:与行星同一套星历(astronomy-engine,ECT 真黄道)。月亮平均每天走 13.2°, 约 2.3 天换一个星座,所以「只看生日」必然算不准——这也是本站所有月亮查询都要求出生时间的原因。

出生时的月相:月相角 = 月亮黄经 − 太阳黄经(归一化到 0–360°),被照亮比例 = (1 − cos 月相角) / 2。 这与当日运势页上的月相是同一个公式,只是取的时刻不同(你出生那一刻 vs 今天)。

上升星座:由出生时刻的格林尼治恒星时换算本地恒星时,结合出生地纬度与黄赤交角(23.4393°)求东方地平线与黄道的交点, 公式见第 6 节。天顶(MC)由本地恒星时与黄赤交角直接求得。

城市坐标与时间:内置城市坐标精确到城市中心(误差通常 < 0.1°),对应上升度数误差 < 0.3°; 时区使用 IANA 数据库并按出生日期取当时的真实偏移——包括中国 1986–1991 年实行的夏令时。 这一点很多在线工具会算错,如果你出生在那几年,可以拿本站结果与其他工具对比一下。

12. 页面为什么这么轻

本站没有前端框架、没有图标库、没有一张照片。星盘与徽记全部是运行时画的 SVG, 文本资源在 OSS 上以 gzip 存储并始终返回压缩版本。构建时实测:首页 HTML 23.2 KB、样式表 hud.css 21.5 KB、脚本 app.js 3.4 KB。

资源解压传输
首页 HTML23.2 KB约 6.3 KB
样式表 hud.css21.5 KB约 5.8 KB
脚本 app.js3.4 KB约 0.9 KB

结果是:首页整页传输 12.5 KB(含 HTML、CSS、JS、图标),星盘工具页 27.4 KB(含计算脚本与分享卡模块)。同类星座站常见 1–3 MB(图多、框架重),我们在两位数量级上。

代价说清楚:因为不用框架,所有交互都是手写的;因为不做图片,视觉上限比图片站低。 我们选择把预算花在「打开快」和「看得懂」上,而不是「看起来华丽」。

13. 我们做错过的三件事

公开修正记录比只写"我们的算法很严谨"更有用。下面三条都是真实发生过、并且改了的问题。

① 月运指数曾经全是 71–72 分

发现于第 10 轮自测 · 当轮修正

现象:12 个星座的月运挤在 71–72 两个值上,等于没有区分度。

原因:第一版把"当月每日指数的算术平均"当成月指数。日指数本身在 60–90 之间波动, 一平均就回到中部——这是统计学上的必然,不是 bug。

改法:换成"慢速行星与本星座的星座级关系"(木星 2.4 倍权重、土星 2.0 倍……), 现在的分布是 9 个不同取值、范围 55–74。

现在怎么防:页面明确写「月运 ≠ 每日指数平均」,并在方法页解释为什么。

② 按日运势页曾经要连点 28 次才到头

发现于第 12 轮内链审计 · 当轮修正

现象:34 个按日页面首尾相连(上一页 ↔ 下一页),从最新一天点到最早一天要 28 步。

原因:当时只想"让每页都有前后入口",没考虑这条链会无限延伸。

改法:每页只保留「前一天 / 后一天 / 回今日」,链路长度从 28 降到 3。

现在怎么防:链接闸门检查"任一页面深度 ≤ 3",以后再出现这种长链会直接构建失败。

③ 所有页面的 lastmod 都写成构建日

发现于第 29 轮 sitemap 复核 · 当轮修正

现象:sitemap 里 228 条 URL 的 lastmod 全是同一天。

原因:构建脚本直接用了"今天"。

为什么这很糟:搜索引擎会学到"这个站的 lastmod 不可信",之后真更新也不来抓。

改法:按内容哈希判断——页面没变就沿用上次日期,变了才更新。实测两次构建之间只有 12 个页面变更, 其余 216 个页面守住了原日期。

原则:能写出来的错误,比藏起来的正确更可信。发现问题发邮件,我们改完会把这一节更新。

如果你发现任何一个数字与天文台公布的数据不符,请发邮件到 hello@mengstone.com,我们会优先修正。

SYS · ZODIAC TERMINAL · v1