Files
astro/basic/moon.go
T
b612 2bf8478639 feat: 完善日月食与月掩几何链路并扩展历法接口
- 新增日月食中心带、偏食带、阴影足迹、等时线、食分线及升落边界计算,支持极区与混合食拓扑
- 新增日食单时刻阴影求解器、站心状态查询、批量采样和 ΔT 覆盖接口
- 重构恒星与行星月掩路径,补充有限盘面接触、站心修正、掩带宽度、极区投影及升落边界
- 扩展 SVG 与 GeoJSON 输出,支持详细面板、全球/极区/地球投影、边界闭合、时间标记和拓扑签名
- 扩展日月食候选搜索、局地搜索、沙罗序列预计算与范围外推,补充系列锚点和成员一致性校验
- 补齐古历纪年、儒略历独有闰日、多公历候选、历法改革跨日及精确日期运算接口
- 优化 ΔT、章动、恒星时、月球地平线、事件根搜索和本地星历缓存,降低重复计算开销并提升边界稳定
2026-09-17 12:27:40 +08:00

95 lines
2.2 KiB
Go

package basic
import (
"b612.me/astro/planet"
. "b612.me/astro/tools"
)
func MoonLo(jd float64) float64 { //'月球平黄经
return planet.MoonLo(jd)
}
func SunMoonAngle(jd float64) float64 { // '月日距角
return planet.SunMoonAngle(jd)
}
func MoonM(jd float64) float64 { // '月平近点角
return planet.MoonM(jd)
}
func MoonLonX(jd float64) float64 { // As Double '月球经度参数(到升交点的平角距离)
return planet.MoonLonX(jd)
}
func MoonI(jd float64) float64 {
return planet.MoonI(jd)
}
func MoonR(jd float64) float64 {
return planet.MoonR(jd)
}
func MoonB(jd float64) float64 {
return planet.MoonB(jd)
}
func MoonTrueLo(jd float64) float64 {
return planet.MoonTrueLo(jd)
}
func MoonTrueBo(jd float64) float64 {
return planet.MoonTrueBo(jd)
}
func MoonAway(jd float64) float64 { //'月地距离
return planet.MoonAway(jd)
}
/*
* @name 月球视黄经
*/
func MoonApparentLo(jd float64) float64 {
return MoonTrueLo(jd) + Nutation2000Bi(jd)
}
/*
* 月球真赤纬
*/
func MoonTrueDec(jd float64) float64 {
moonLo := MoonApparentLo(jd)
moonBo := MoonTrueBo(jd)
tmp := Sin(moonBo)*Cos(TrueObliquity(jd)) + Cos(moonBo)*Sin(TrueObliquity(jd))*Sin(moonLo)
res := ArcSin(tmp)
return res
}
/*
* 月球真赤经
*/
func MoonTrueRa(jd float64) float64 {
return LoToRa(jd, MoonApparentLo(jd), MoonTrueBo(jd))
}
func MoonTrueRaDec(jd float64) (float64, float64) {
return LoBoToRaDec(jd, MoonApparentLo(jd), MoonTrueBo(jd))
}
// MoonApparentRa 站心视赤经;jd 为当地时儒略日,tz 为时区小时数 / topocentric apparent right ascension; jd is local civil time and tz is the zone offset in hours.
func MoonApparentRa(jd, lon, lat float64, tz int) float64 {
jde := TD2UT(jd, true)
utcJD := jde - float64(tz)/24.000
ra := MoonTrueRa(utcJD)
dec := MoonTrueDec(utcJD)
away := MoonAway(utcJD) / 149597870.7
topoRA := TopocentricRa(ra, dec, lat, lon, jd-float64(tz)/24.000, away, 0)
return topoRA
}
func MoonApparentDec(jd, lon, lat, tz float64) float64 {
jde := TD2UT(jd, true)
utcJD := jde - tz/24
ra := MoonTrueRa(utcJD)
dec := MoonTrueDec(utcJD)
away := MoonAway(utcJD) / 149597870.7
topoDec := TopocentricDec(ra, dec, lat, lon, jd-tz/24, away, 0)
return topoDec
}