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
+6 -6
View File
@@ -743,9 +743,9 @@ func (solver solarEclipseSolver) validRiseSetArcState(
referenceJDE float64,
iterations int,
) (solarEclipseRiseSetArcState, int, bool) {
jd := referenceJDE + coordinates[2]/solarEclipseRiseSetArcTimeScale
jde := referenceJDE + coordinates[2]/solarEclipseRiseSetArcTimeScale
longitude, latitude := normalizeLongitude(coordinates[0]), coordinates[1]
evaluation := solver.magnitudeEvaluationAt(jd)
evaluation := solver.magnitudeEvaluationAt(jde)
state := evaluation.center.stateAt(longitude*rad, latitude*rad, 0)
tangent, ok := solarEclipseMagnitudeArcTangent(jacobian)
if !ok {
@@ -755,7 +755,7 @@ func (solver solarEclipseSolver) validRiseSetArcState(
coordinates: coordinates,
tangent: tangent,
point: SolarEclipsePathPoint{
JDE: jd, Longitude: longitude, Latitude: latitude, SunAltitude: state.sunAltitudeRad / rad,
JDE: jde, Longitude: longitude, Latitude: latitude, SunAltitude: state.sunAltitudeRad / rad,
},
}, iterations, true
}
@@ -765,9 +765,9 @@ func (solver solarEclipseSolver) riseSetArcJacobian(
greatest bool,
referenceJDE float64,
) ([2]float64, [2][3]float64, bool) {
jd := referenceJDE + coordinates[2]/solarEclipseRiseSetArcTimeScale
jde := referenceJDE + coordinates[2]/solarEclipseRiseSetArcTimeScale
longitude, latitude := normalizeLongitude(coordinates[0]), coordinates[1]
evaluation := solver.magnitudeEvaluationAt(jd)
evaluation := solver.magnitudeEvaluationAt(jde)
residual, ok := solarEclipseRiseSetArcResidualAt(evaluation, longitude, latitude, greatest)
if !ok {
return [2]float64{}, [2][3]float64{}, false
@@ -783,7 +783,7 @@ func (solver solarEclipseSolver) riseSetArcJacobian(
jacobian[row][column] = (shiftedResidual[row] - residual[row]) / steps[column]
}
}
timeEvaluation := solver.magnitudeEvaluationAt(jd + steps[2]/solarEclipseRiseSetArcTimeScale)
timeEvaluation := solver.magnitudeEvaluationAt(jde + steps[2]/solarEclipseRiseSetArcTimeScale)
timeResidual, timeOK := solarEclipseRiseSetArcResidualAt(timeEvaluation, longitude, latitude, greatest)
if !timeOK {
return [2]float64{}, [2][3]float64{}, false