feat: 完善日月食与月掩几何链路并扩展历法接口
- 新增日月食中心带、偏食带、阴影足迹、等时线、食分线及升落边界计算,支持极区与混合食拓扑 - 新增日食单时刻阴影求解器、站心状态查询、批量采样和 ΔT 覆盖接口 - 重构恒星与行星月掩路径,补充有限盘面接触、站心修正、掩带宽度、极区投影及升落边界 - 扩展 SVG 与 GeoJSON 输出,支持详细面板、全球/极区/地球投影、边界闭合、时间标记和拓扑签名 - 扩展日月食候选搜索、局地搜索、沙罗序列预计算与范围外推,补充系列锚点和成员一致性校验 - 补齐古历纪年、儒略历独有闰日、多公历候选、历法改革跨日及精确日期运算接口 - 优化 ΔT、章动、恒星时、月球地平线、事件根搜索和本地星历缓存,降低重复计算开销并提升边界稳定
This commit is contained in:
@@ -3,6 +3,7 @@ package calendar
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"b612.me/astro/basic"
|
||||
@@ -58,22 +59,35 @@ func hanQingJieQiPatternDelta(patternID, pos int) int {
|
||||
return 15
|
||||
}
|
||||
|
||||
// hanQingJieQiPatternExceptions 是未排序的 95 项例外表,先缓存成 map 再查,避免每次线性扫描。
|
||||
var (
|
||||
hanQingJieQiPatternExceptionOnce sync.Once
|
||||
hanQingJieQiPatternExceptionByKey map[int]int
|
||||
)
|
||||
|
||||
func hanQingJieQiPatternExceptionDelta(key int) (int, bool) {
|
||||
for _, item := range hanQingJieQiPatternExceptions {
|
||||
if int(item&0x0FFF) != key {
|
||||
continue
|
||||
hanQingJieQiPatternExceptionOnce.Do(func() {
|
||||
m := make(map[int]int, len(hanQingJieQiPatternExceptions))
|
||||
for _, item := range hanQingJieQiPatternExceptions {
|
||||
k := int(item & 0x0FFF)
|
||||
if _, exists := m[k]; exists {
|
||||
continue
|
||||
}
|
||||
switch item >> 12 {
|
||||
case 0:
|
||||
m[k] = 12
|
||||
case 1:
|
||||
m[k] = 14
|
||||
case 2:
|
||||
m[k] = 17
|
||||
default:
|
||||
m[k] = 15
|
||||
}
|
||||
}
|
||||
switch item >> 12 {
|
||||
case 0:
|
||||
return 12, true
|
||||
case 1:
|
||||
return 14, true
|
||||
case 2:
|
||||
return 17, true
|
||||
}
|
||||
return 15, true
|
||||
}
|
||||
return 0, false
|
||||
hanQingJieQiPatternExceptionByKey = m
|
||||
})
|
||||
delta, ok := hanQingJieQiPatternExceptionByKey[key]
|
||||
return delta, ok
|
||||
}
|
||||
|
||||
func packedBits(data []byte, offset, width int) int {
|
||||
|
||||
Reference in New Issue
Block a user