feat: 完善日月食与月掩几何链路并扩展历法接口

- 新增日月食中心带、偏食带、阴影足迹、等时线、食分线及升落边界计算,支持极区与混合食拓扑
- 新增日食单时刻阴影求解器、站心状态查询、批量采样和 ΔT 覆盖接口
- 重构恒星与行星月掩路径,补充有限盘面接触、站心修正、掩带宽度、极区投影及升落边界
- 扩展 SVG 与 GeoJSON 输出,支持详细面板、全球/极区/地球投影、边界闭合、时间标记和拓扑签名
- 扩展日月食候选搜索、局地搜索、沙罗序列预计算与范围外推,补充系列锚点和成员一致性校验
- 补齐古历纪年、儒略历独有闰日、多公历候选、历法改革跨日及精确日期运算接口
- 优化 ΔT、章动、恒星时、月球地平线、事件根搜索和本地星历缓存,降低重复计算开销并提升边界稳定
This commit is contained in:
2026-09-17 12:27:40 +08:00
parent 9ee2163cc7
commit 2bf8478639
428 changed files with 85981 additions and 7998 deletions
+17 -3
View File
@@ -77,7 +77,8 @@ func MeanSiderealTime1982(jd float64) float64 {
// ApparentSiderealTime1982 视恒星时,计算章动
func ApparentSiderealTime1982(jd float64) float64 {
tmp := MeanSiderealTime1982(jd)
return tmp + Nutation2000Bi(jd)*Cos(TrueObliquity(jd))/15
dpsi, deps := Nutation2000B(jd)
return tmp + dpsi*math.Cos((Obliquity1980(jd)+deps)*math.Pi/180)/15
}
// EarthRotationAngle 计算地球自转角 (ERA)
@@ -115,10 +116,23 @@ func MeanSiderealTime2006(jd_ut1 float64) float64 {
return gmst * deg / 15
}
// ApparentSiderealTime2006 视恒星时,计算章动
// ApparentSiderealTime2006 视恒星时,计算章动。
// 一次求值只要一份 IAU2000B 章动(黄经与交角在同一次展开里同时得到),并走有界记忆表,
// 避免月掩路径里的重复求值;ΔT 覆盖会使记忆表按世代失效。见 sidereal_memo.go。
// ApparentSiderealTime2006 computes apparent sidereal time. One evaluation needs only a single
// IAU2000B nutation expansion (longitude and obliquity come out of the same series) and is
// memoized so repeated occultation-path queries do not rerun it; a ΔT override invalidates the
// memo by generation. See sidereal_memo.go.
func ApparentSiderealTime2006(jd float64) float64 {
if value, ok := siderealMemoLoad(jd); ok {
return value
}
generation := siderealMemoGeneration()
tmp := MeanSiderealTime2006(jd)
return tmp + Nutation2000Bi(jd)*Cos(TrueObliquity(jd))/15
dpsi, deps := Nutation2000B(jd)
value := tmp + dpsi*math.Cos((Obliquity1980(jd)+deps)*math.Pi/180)/15
siderealMemoStore(jd, value, generation)
return value
}
func StarRiseTime(jde, ra, dec, lon, lat, height, timezone float64, aero bool) (float64, error) {