feat: 完善时标与天象几何计算并扩展输出接口

- 新增时标、ΔT 模型、质心时间与 UT1 支持
- 改进日月食、月掩、行星事件及路径边界计算
- 完善恒星三维自行与动态距离传播
- 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具
- 整理中英文手册、示例资源及回归测试
This commit is contained in:
2026-09-23 18:55:12 +08:00
parent 1f31a9b5b5
commit 16c62a97d5
503 changed files with 33290 additions and 9471 deletions
+22
View File
@@ -0,0 +1,22 @@
package formula
import "b612.me/astro/tools"
// DistanceUnit 距离输入单位,与 tools 共用同一套枚举 / a unit accepted for distance input, shared with tools.
type DistanceUnit = tools.DistanceUnit
const (
// DistanceParsec 秒差距 / parsec.
DistanceParsec = tools.DistanceParsec
// DistanceLightYear 光年 / light-year.
DistanceLightYear = tools.DistanceLightYear
// DistanceAU 天文单位 / astronomical unit.
DistanceAU = tools.DistanceAU
)
// Distance 把给定单位的距离换算为秒差距 / converts a distance in the given unit to parsecs.
//
// 换算基元位于 tools,本函数只是对外转发;非正数、NaN 与未知单位返回 NaN。
func Distance(value float64, unit DistanceUnit) float64 {
return tools.DistanceToParsecs(value, unit)
}
+19
View File
@@ -0,0 +1,19 @@
package formula
import (
"math"
"testing"
)
// formula 只做对外转发,换算基元在 tools,这里只锁别名与转发不脱钩。
func TestDistanceDelegatesToTools(t *testing.T) {
assertFormulaClose(t, "1 ly in pc", Distance(1, DistanceLightYear), 0.306601393786, 1e-12)
assertFormulaClose(t, "1 pc identity", Distance(2.5, DistanceParsec), 2.5, 1e-15)
assertFormulaClose(t, "aliases agree", float64(DistanceParsec), 0, 1e-15)
if got := Distance(0, DistanceParsec); !math.IsNaN(got) {
t.Fatalf("Distance(0) = %v, want NaN", got)
}
if got := Distance(1, DistanceUnit(200)); !math.IsNaN(got) {
t.Fatalf("Distance(1, unknown unit) = %v, want NaN", got)
}
}