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
+7 -7
View File
@@ -163,21 +163,21 @@ func planetPhysicalN(jd float64, n int, model planetPhysicalModel) PlanetPhysica
initialX, initialY, initialZ := planetXYZN(model.planetIndex, jd, n)
targetVector := Vector3{initialX, initialY, initialZ}
lightTimeDays := astronomicalUnitLightTimeDays * vectorMagnitude(targetVector)
targetJD := jd - lightTimeDays
targetJDE := jd - lightTimeDays
geoX, geoY, geoZ := planetXYZN(model.planetIndex, targetJD, n)
geoX, geoY, geoZ := planetXYZN(model.planetIndex, targetJDE, n)
geocentricVector := Vector3{geoX, geoY, geoZ}
observerDirection := normalizeVector(Vector3{-geocentricVector[0], -geocentricVector[1], -geocentricVector[2]})
heliocentricLongitude := planet.WherePlanetN(model.planetIndex, 0, targetJD, n)
heliocentricLatitude := planet.WherePlanetN(model.planetIndex, 1, targetJD, n)
heliocentricLongitude := planet.WherePlanetN(model.planetIndex, 0, targetJDE, n)
heliocentricLatitude := planet.WherePlanetN(model.planetIndex, 1, targetJDE, n)
solarDirection := normalizeVector(eclipticCartesian(heliocentricLongitude+180, -heliocentricLatitude, 1))
obliquity := EclipticObliquity(targetJD, false)
obliquity := EclipticObliquity(targetJDE, false)
observerEquatorial := normalizeVector(rotateEclipticToEquatorial(observerDirection, obliquity))
solarEquatorial := normalizeVector(rotateEclipticToEquatorial(solarDirection, obliquity))
poleRA, poleDec, rotationEast := model.poleRotation(targetJD)
poleRA, poleDec, rotationEast := model.poleRotation(targetJDE)
poleJ2000 := raDecToVector(poleRA, poleDec)
nodeJ2000 := Vector3{-math.Sin(poleRA * rad), math.Cos(poleRA * rad), 0}
eastJ2000 := normalizeVector(pxp(poleJ2000, nodeJ2000))
@@ -187,7 +187,7 @@ func planetPhysicalN(jd float64, n int, model planetPhysicalModel) PlanetPhysica
nodeJ2000[2]*Cos(rotationEast) + eastJ2000[2]*Sin(rotationEast),
})
j2000ToDate := precessionMatrix(2451545.0, targetJD)
j2000ToDate := precessionMatrix(2451545.0, targetJDE)
poleDate := normalizeVector(applyMatrix3(j2000ToDate, poleJ2000))
primeMeridianDate := normalizeVector(applyMatrix3(j2000ToDate, primeMeridianJ2000))
eastDate := normalizeVector(pxp(poleDate, primeMeridianDate))