36 lines
1.5 KiB
Go
36 lines
1.5 KiB
Go
|
|
package basic
|
||
|
|
|
||
|
|
import (
|
||
|
|
"math"
|
||
|
|
|
||
|
|
"b612.me/astro/internal/geodata"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 月缘修正是否生效的统一判据:每种量纲只有一个容差,所有层都经下面的函数判断,避免口径漂移。
|
||
|
|
const (
|
||
|
|
// limbAppliedTimeToleranceDays 接触时刻与时长的容差(0.05 秒)。
|
||
|
|
limbAppliedTimeToleranceDays = 0.05 / 86400.0
|
||
|
|
// limbAppliedDistanceToleranceKM 地面界线点的平移容差(0.05 km)。
|
||
|
|
limbAppliedDistanceToleranceKM = 0.05
|
||
|
|
// limbAppliedMagnitudeTolerance 食分与遮蔽率的容差。
|
||
|
|
limbAppliedMagnitudeTolerance = 1e-9
|
||
|
|
)
|
||
|
|
|
||
|
|
// limbTimeChanged 报告两个儒略日(或以日为单位的时长)是否相差超过时刻容差;任一非有限时视为未变。
|
||
|
|
func limbTimeChanged(corrected, original float64) bool {
|
||
|
|
return finite(corrected) && finite(original) &&
|
||
|
|
math.Abs(corrected-original) > limbAppliedTimeToleranceDays
|
||
|
|
}
|
||
|
|
|
||
|
|
// limbMagnitudeChanged 报告食分或遮蔽率是否相差超过容差;任一非有限时视为未变。
|
||
|
|
func limbMagnitudeChanged(corrected, original float64) bool {
|
||
|
|
return finite(corrected) && finite(original) &&
|
||
|
|
math.Abs(corrected-original) > limbAppliedMagnitudeTolerance
|
||
|
|
}
|
||
|
|
|
||
|
|
// limbGroundMoved 报告地面点(度)是否平移超过距离容差。
|
||
|
|
func limbGroundMoved(originalLon, originalLat, correctedLon, correctedLat float64) bool {
|
||
|
|
longitude := signedAngleDifference(correctedLon, originalLon) * math.Cos(originalLat*rad)
|
||
|
|
return math.Hypot(longitude, correctedLat-originalLat)*geodata.EarthKMPerDegree > limbAppliedDistanceToleranceKM
|
||
|
|
}
|