Hengefinder: 都市の太陽アラインメントの幾何学とアルゴリズム
年に二回、数千人がニューヨーク市に集まり「Manhattanhenge」を体験します。これは、夕日が街路の東西グリッドと完全に一致する瞬間です。この現象はローカルな話題ですが、根底にある幾何学は普遍的です。もし太陽がマンハッタンの通りと一致できるなら、世界中のどこでも、通りの方位が日没時の太陽の方位と合致すれば同様に一致します。
このような瞬間を予測するツール Hengefinder を構築するには、単純な仮定と球面三角法や軌道力学という複雑な現実との間のギャップを埋める必要があります。以下では、都市の太陽アラインメント計算に関わる技術的課題を深掘りします。
The Challenge of Road Bearing: Earth is Not Flat
「ヘンジ」瞬間を見つける最初のステップは、通りの方位―真北に対する角度―を求めることです。一般的な直感は、通り上の二点(緯度と経度)を取り、座標差を計算し atan2 で角度を求めるというものです。しかし、これはデカルト平面を前提としており、球面上には存在しません。
The Longitude Convergence Problem
緯度線は等間隔ですが、経度線は極に向かって収束します。たとえば、ニューヨーク市では1度の経度は約52マイルですが、アンカレッジでは約33マイルです。この度数を三角関数にそのまま入れると、方位計算が歪んでしまいます。
この問題を解決するには、経度を緯度の余弦でスケーリングする必要があります。これにより、緯度と経度が比較可能な単位に統一され、角度計算が正しく行えます。
# Corrected approach for short street segments
delta_y = lat_2 - lat_1
mean_lat = math.radians((lat_1 + lat_2) / 2)
delta_x = (lon_2 - lon_1) * math.cos(mean_lat)
bearing_rad = math.atan2(delta_x, delta_y)
bearing_deg = math.degrees(bearing_rad)
Redefining "Sunset" via Binary Search
Python の Astral などの標準天文ライブラリは、太陽が地平線下に完全に沈んだ瞬間を「日没」と定義します。ヘンジにとってはそれは遅すぎます。目指すのは、太陽の円盤が地平線にちょうど触れた瞬間です。
Boundary Search vs. Value Search
太陽の高度は地平線に近づくにつれて単調に変化するため、二分探索の理想的な対象です。ただし、標準的な二分探索は特定の値を探します。このケースでは「最後に真である」二分探索、すなわち太陽の高度が特定の閾値を上回っている最後の分を見つける必要があります。
altitude == target を探す代わりに、アルゴリズムはブール式を評価します:「太陽はまだ目標高度以上か?」
while left < right:
mid = (left + right + 1) // 2 # Upper-biased midpoint
if altitude > target:
left = mid # Valid, could be the last one
else:
right = mid - 1 # Invalid, look earlier
Finding Alignment: The Two-Phase Search
道路の方位と太陽の方位(北に対する太陽の角度)が分かれば、次はそれらが一致する日付を探すステップです。これは単純ではありません。太陽の方位は一年を通して単調ではなく、至点で方向が反転する滑らかな曲線を描きます。
Phase 1: Coarse Sampling
一年のすべての日に対して方位を計算すると計算コストが高く、API 呼び出しも過剰になります。そのため、30日ごとにサンプリングする粗い検索を行います。アルゴリズムは次の条件でウィンドウをフラグ付けします:
- 中間値定理が成立:二つのサンプル間で太陽の方位が道路の方位を横切る。
- 方向転換が起きる:方位が反転し、ピークまたは谷に達したことを示す。これが道路の方位と一致した可能性があります。
Phase 2: Fine-Grained Search
候補ウィンドウが特定されたら、ツールは日単位の検索に切り替えて、正確な日時を特定します。
Broader Applications and Limitations
Hengefinder は日没に焦点を当てていますが、ロジックは他の天体やアラインメントにも拡張可能です。モバイル版アプリは月や「Sauron Henges」―太陽や月が特定の建物の頂部と完全に一致する現象―にも対応しています。
Community Insights and Counterpoints
このプロジェクトは太陽追跡の実用性について議論を呼びました。あるユーザーは、二分探索はエレガントなプログラミング演習だが、NOAA などのソーラー方程式を直接使えば太陽位置は計算できると指摘しました。別のユーザーは現在のモデルの制限を指摘しました:
"It doesn't work with curved streets."
さらに、こうした計算は美的価値を超えて有用です。あるコメント者は「逆 Hengefinder」―都市の影ゾーンを予測し、熱に敏感な子どもを最も涼しいルートで案内するアプリ―の構想を提案しました。
Conclusion
都市のヘンジは幾何学的に稀ですが、世界中で常に起きています。アムステルダムの直線運河からニューヨークの摩天楼まで、これらの瞬間は人間の都市計画と天体力学の交差点の産物です。問題を「閉じた箱」―球面幾何、境界探索、粗から細へのサンプリング―として扱うことで、Hengefinder は複雑な天文学的課題を都市探検のための手軽なツールへと変換します。