Calculation Trace — 天体黄経 → ハウス帰属の判定(C-1)

Layer C — 天体ハウス帰属の完全トレース
入力例:読み込み中…

⚑ このページは純粋な区間判定(球面三角法なし)です。 Layer A(惑星黄経)と Layer B(ハウスカスプ)の計算が終わった後の最終段階として、 「どの惑星がどのハウスに入るか」を算術的に決定します。

本ビューでは、実装上は関数に吸収される処理も、計算過程の理解と検証のために段階的に表示しています。

Stella-JS を読み込み中…

C-1 の定義と位置付け

① レイヤー構造
Layer入出力計算内容
Layer A BSP → 惑星黄経 λ BSP読み込み・ICRS→黄道変換・歳差補正
Layer B RAMC・ε・φ → ハウスカスプ[12] ハウスシステムごとの球面幾何計算
Layer C(本ページ) λ + cusps[12] → ハウス番号 区間判定のみ(加減算・比較)
C-1 は球面三角法を一切使わない。Layer A・B の出力を受け取り、単純な不等式(区間の包含判定)で答えを出す。

入力値

観測日時・場所
読み込み中…

判定アルゴリズム — getHouseNum(lon, cusps)

① 一般式

ハウスカスプ配列 $\text{cusps}[0..11]$ において、 各ハウス $i$($i = 0, 1, \ldots, 11$)の境界は $c_1 = \text{cusps}[i]$、$c_2 = \text{cusps}[(i+1) \bmod 12]$ とする。
天体黄経 $\lambda$ がハウス $i+1$ に属する条件:

$$ \text{inHouse}_i = \begin{cases} c_1 \leq \lambda < c_2 & (c_2 > c_1 \quad \text{通常ケース}) \\ \lambda \geq c_1 \;\lor\; \lambda < c_2 & (c_2 \leq c_1 \quad \text{折り返しケース}) \end{cases} $$

$\text{inHouse}_i = \text{true}$ となった最初の $i$ について、ハウス番号 $= i + 1$ を返す。

通常ケース($c_2 > c_1$):ハウスが 0°/360° をまたがない。$c_1$ から $c_2$ の範囲を半開区間 $[c_1, c_2)$ で判定。
折り返しケース($c_2 \leq c_1$):ハウスが 0°/360° をまたぐ(例:c_1 = 340°、c_2 = 10°)。 この場合「$c_1$ 以上」または「$c_2$ 未満」の OR 条件になる。
下界は包含($\geq$)、上界は除外($<$):これにより 2 つの連続するハウスが同じ黄経に同時に帰属する状況を防ぐ。
フォールバック:全 12 ハウスに入らない場合(浮動小数点誤差等)は H1 を返す。
② 変数の意味
変数意味取得元
lon天体の黄経(0°〜360°)Layer A(BSP + ICRS→黄道変換)
cuspsハウスカスプ 12 個の配列(0-indexed)Layer B(各ハウスシステム計算)
c1ハウス i+1 の始点(ハウスカスプ)cusps[i]
c2ハウス i+1 の終点(次ハウスのカスプ)cusps[(i+1) % 12]

Step 1 — Layer A 出力:惑星黄経(of-date, 視位置)

① 3 種類の視位置補正の定義

幾何位置(BSP を観測時刻 $t$ でそのまま読んだ位置)から視位置(我々が実際に観測する方向)を得るには、以下の 3 つの補正を順に適用する。

補正種別原因典型的な大きさ一般式 Stella-JS 実装
① 光行時補正
light-time
光の速さが有限なため、我々が見ているのは $\tau$ 秒前の天体位置 太陽 ≈ 506" / 土星 ≈ 4946"
(距離に比例)
$\tau = r / c$,天体位置を $t - \tau$ で取得 ✓ computePosition(naif, 0, jdTdb - τ)
② 光偏差
light deflection
太陽の重力場による光の屈折(一般相対論効果) 太陽縁で最大 1.75"
通常位置で < 0.01"
$\Delta\hat{e} = \dfrac{2GM_\odot}{c^2 r}\cdot\dfrac{\hat{q} - \hat{e}(\hat{q}\cdot\hat{e})}{1 + \hat{q}\cdot\hat{e}}$ ✓ applyLightDeflection()
③ 年周光行差
annual aberration
地球の公転速度($v \approx 30$ km/s)による見かけの方向ずれ 最大 $\kappa = 20.50''$
平均 ≈ 14〜20"
$\hat{u}' = \dfrac{\hat{u} + \boldsymbol{\beta}}{1 + \hat{u}\cdot\boldsymbol{\beta}}$,$\boldsymbol{\beta} = \vec{v}/c$ ✓ applyAberration()

さらに座標系補正として歳差(precession)が加わる(物理補正ではなく J2000 → of-date の座標変換)。

出典:Meeus "Astronomical Algorithms" 2nd ed. — Ch.33(光行時)、Ch.26(光行差)、一般相対論(光偏差)。
Stella-JS では app.js の computeApparent() が上記をこの順序で適用し icrsToEcliptic() で of-date 変換する。
② 各天体への補正値(数値代入)— τ の計算
計算中…
② 補正ごとの Δλ 一覧(評価結果)

幾何位置から出発し、3 種類の補正を順に加えたときの黄経変化量:

計算中…
Δ値は J2000 黄道上での差(arcsec)。歳差 Δ は J2000 → of-date の座標系シフト(物理的な光路補正ではない)。
光偏差は惑星が太陽に近い時ほど大きくなる(太陽縁では 1.75"、通常は <0.01" )。
② → ③ 途中式 — ICRS 地心 XYZ → 黄道黄経

光行時補正済み XYZ(ICRS・地心)を黄道座標に変換する。 黄道傾斜角 $\varepsilon$(of-date)で天の赤道面を黄道面へ回転する:

$$ \begin{pmatrix} x_e \\ y_e \\ z_e \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\varepsilon & \sin\varepsilon \\ 0 & -\sin\varepsilon & \cos\varepsilon \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} $$ $$ \lambda_\text{raw} = \operatorname{atan2}(y_e,\, x_e) \times \frac{180°}{\pi}, \qquad \lambda = (\lambda_\text{raw} + 360°) \bmod 360° $$
計算中…
$\varepsilon$ は of-date 黄道傾斜角(歳差補正込み)。
出典:Meeus "Astronomical Algorithms" 2nd ed. Ch.13(座標変換の回転行列)。
③ 光行時補正後の黄経(評価結果)
計算中…
各惑星の黄経 λ は Layer A(layer_a.html)で詳細を展開済み。
水星〜土星はバリセンター(BC)値。惑星本体との差は占星術精度では無視できる(<0.01 arcsec)。

Step 2 — Layer B 出力:ハウスカスプ(3 システム比較)

② 各システムのカスプ一覧
計算中…
Placidus(B-5)、 Equal(B-9)、 Whole Sign(B-10)の Layer B 出力をそのまま使用。

Step 3 — 詳細判定トレース(月を例に、Placidus)

② 数値代入

月の黄経 $\lambda$ に対して、Placidus カスプで全 12 ハウスをループ判定:

計算中…
ループは該当ハウスが見つかった時点で打ち切る(if (inHouse) return i + 1;)。
緑行 = 条件成立。 橙行 = 折り返しケース(c₂ ≤ c₁)が発動。

Step 4 — 折り返しケース(wraparound)の確認

② カスプ境界の確認

ハウスが 0°/360° をまたぐ($c_2 \leq c_1$)場合、折り返しケースが発動する。
以下は今回のカスプで折り返しが発生するハウスの一覧(全システム):

計算中…
折り返しケースは「普通に動けば起きない特殊条件」ではなく、 天球の巡回構造(360° = 0°)から必ず発生しうる一般的なケース。 実装でここを見落とすと、0° 付近の黄経を持つ天体が誤ったハウスに帰属する。

Step 5 — 全天体 × 全システム 帰属一覧

③ 評価結果
計算中…
同じ黄経でも、ハウスシステムによって帰属が変わることがある。
これは各システムのカスプ境界(Layer B 出力)が異なるためであり、 惑星位置(Layer A 出力)は共通。 「どのシステムが正しいか」という問いは計算層では答えられない—— それはハウスシステムの選択(占星術の設計上の選択)の問題である。

Stella-JS 照合(getHouseNum 再現)

照合結果
計算中…
getHouseNum() は ui-astro.js 内の純粋関数として実装されている (外部エクスポートなし)。本トレースでは同一ロジックをインライン実装して照合する。

まとめ

C-1 のポイント
項目内容
使う数学加減算・比較のみ(球面三角法なし)
入力元Layer A(惑星黄経)+ Layer B(ハウスカスプ)
判定方式半開区間 $[c_1, c_2)$ のループ検索
折り返し処理$c_2 \leq c_1$ の場合は OR 条件に切り替え
フォールバック全ハウス不一致時は H1 を返す(浮動小数点誤差対策)
システム依存性同じ惑星黄経でもシステムによって帰属ハウスが変わりうる