You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于行星黄经数据计算行星相位?

行星相位计算的数学实现方法

一、数据预处理

先把原始黄经数据转换成字典格式(方便通过行星名快速获取角度),同时去掉度数符号,将角度值转为浮点数:

planets = {
    "Sun": 135.45,
    "Mars": 29.72,
    "Jupiter": 56.89,
    "Uranus": 45.27,
    "Pluto": 165.78,
    "Venus": 89.34,
    "Mercury": 312.22,
    "Saturn": 267.86,
    "Moon": 92.78,
    "Earth": 33.23
}

二、核心角度差计算逻辑

由于黄道是360°的圆周,两个行星的实际有效夹角是最小弧度数(比如黄经差350°,实际等效于10°夹角)。计算步骤:

  1. 先算出两个行星黄经的绝对差值:delta = abs(angle_a - angle_b)
  2. 取差值和360 - delta中的较小值,得到最小夹角:min_delta = min(delta, 360 - delta)

三、定义相位规则(含容许度)

占星中相位不是严格等于目标角度,会有容许度(比如±2°)。可以预先定义各相位对应的目标角度和容许度:

aspect_rules = {
    "合相": (0, 2),       # 目标0°,容许±2°
    "六分相": (60, 2),     # 目标60°,容许±2°
    "四分相": (90, 2),     # 目标90°,容许±2°
    "三分相": (120, 2),    # 目标120°,容许±2°
    "对分相": (180, 2),    # 目标180°,容许±2°
    "半六分相": (30, 1.5), # 目标30°,容许±1.5°
    "八分相": (45, 1.5)    # 目标45°,容许±1.5°
}

注:容许度可根据占星流派调整,比如某些流派四分相容许度会设为±3°

四、遍历行星对并判断相位

为避免重复计算(比如Sun-Mars和Mars-Sun算同一对),采用索引遍历的方式,只处理每对行星一次:

planet_list = list(planets.items())
# 遍历所有不重复的行星对
for i in range(len(planet_list)):
    name_a, angle_a = planet_list[i]
    for j in range(i + 1, len(planet_list)):
        name_b, angle_b = planet_list[j]
        # 计算最小夹角
        delta = abs(angle_a - angle_b)
        min_delta = min(delta, 360 - delta)
        # 检查是否符合任一相位
        for aspect_name, (target, tolerance) in aspect_rules.items():
            if abs(min_delta - target) <= tolerance:
                print(f"{name_a} 与 {name_b} 形成 {aspect_name}(实际夹角:{min_delta:.2f}°)")

关键注意事项

  • 逆行不影响相位:相位只看行星的黄经位置,和行星是否逆行无关,无需额外处理逆行数据
  • 精度问题:保留黄经的小数位精度,避免因四舍五入导致相位判断错误
  • 容许度灵活调整:不同相位的容许度可单独设置,比如小相位(半六分相、八分相)的容许度通常更小

内容的提问来源于stack exchange,提问作者Bruce Ecurb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:15:58