Files
astro/basic/limb_tolerance.go
T

36 lines
1.5 KiB
Go
Raw Permalink Normal View History

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
}