Hengefinder:城市太陽對齊的幾何與演算法

Hengefinder:城市太陽對齊的幾何與演算法

探索建構預測太陽與城市街道對齊時刻的工具所面臨的技術挑戰,涵蓋球面幾何、二分搜尋與太陽方位角取樣。

Hengefinder:城市太陽對齊的幾何與演算法

每年兩次,成千上萬的人聚集在紐約市觀賞「Manhattanhenge」——那短暫的時刻,夕陽與城市街道的東西格線完美對齊。雖然此現象是地方性的明星,但其背後的幾何是普遍的。只要街道的方位與日落時太陽的方位角相符,太陽就能在曼哈頓對齊的街道上對齊,亦能在世界任何地方的街道上對齊。

構建一個預測這些時刻的工具,稱為 Hengefinder,需要在簡單假設與球面三角學與軌道力學的複雜現實之間搭橋。以下深入探討計算城市太陽對齊所涉及的技術挑戰。

道路方位的挑戰:地球不是平的

要找出「henge」時刻,第一步是確定街道的方位——相對於真北的角度。常見的直覺是取街道上的兩個點(緯度與經度),計算座標差異,並使用 atan2 來求角度。然而,這假設了笛卡爾平面,而球面上並不存在此平面。

經度收斂問題

緯線等距分布,但經線隨向極地方向收斂。例如,一度經度在紐約市大約相當於 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)

透過二分搜尋重新定義「日落」

標準天文函式庫,例如 Python 的 Astral,將日落定義為太陽完全沉入地平線以下的時刻。對於 henge 而言,這已經太晚;目標是找出太陽盤剛好觸及地平線的瞬間。

邊界搜尋 vs. 值搜尋

由於太陽的高度在接近地平線時單調變化,這個問題非常適合使用二分搜尋。然而,標準的二分搜尋尋找的是特定值。在此情況下,開發者需要一種「最後為真」的二分搜尋——找出太陽高度仍高於特定目標閾值的最後一分鐘。

與其搜尋 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

尋找對齊:兩階段搜尋

一旦確定道路方位與太陽的方位角(相對於北的角度),最後一步是找出它們相匹配的日期。這並不簡單,因為一年中太陽的方位角不是單調的——它在夏至與冬至時會改變方向,形成平滑的曲線。

階段 1:粗略抽樣

為避免對全年每一天計算方位角(這會耗費大量計算資源且需要過多的 API 呼叫),使用粗略搜尋,每 30 天抽樣一次。如果符合以下條件,演算法會標記一個窗口以進一步調查:

  1. 中值定理成立:太陽的方位角在兩個抽樣點之間跨過道路方位。
  2. 方向反轉發生:方位角改變方向,意味著達到峰值或谷值,可能與道路方位相吻合。

階段 2:精細搜尋

一旦確定潛在窗口,工具會切換為逐日搜尋,以精確定位對齊的日期與時間。

更廣泛的應用與限制

雖然 Hengefinder 主要聚焦於日落,但其邏輯可延伸至其他天體與對齊。該應用的行動版已擴展至包括月亮以及「Sauron Henges」,即太陽或月亮與特定建築物頂部完美對齊的情況。

社群見解與反對意見

此專案引發了關於太陽追蹤實務性的討論。有些使用者指出,雖然二分搜尋是一個優雅的程式練習,但太陽位置可直接使用如 NOAA 等來源的太陽方程式計算。另一些人則指出目前模型的限制:

「它無法適用於彎曲的街道。」

此外,此類計算的實用性不僅限於美學。一位評論者建議開發「反向 Hengefinder」——一個預測城市陰影區域的應用,協助家長為對熱敏感的孩子規劃最涼爽的路徑。

結論

城市 henge 在幾何上雖稀有,卻在全球不斷上演。從阿姆斯特丹的直線運河到紐約的摩天大樓,這些時刻是人類城市規劃與天體力學交匯的結果。透過將問題視為一系列「封閉盒子」——球面幾何、邊界搜尋與粗到精的抽樣——Hengefinder 將複雜的天文問題轉化為可供城市探索的實用工具。

Sources