Files
astro/jupiter/satellites.go
T
b612 044f2f4381 feat: 引入可切换星历模型并扩展天象观测链路
- 新增半解析、旧模型、自定义与多源堆叠星历实例,提供 Context、Instance、SPK 读取及状态与视位置计算
- 统一太阳、月球和行星实例接口,扩展黄经穿越、留、相位、最近角距、偕日可见、任意高度升落、轨道节点及凌日等天象查询
- 完善日月食、月掩与凌日的月缘剖面、有限盘面接触、站心修正、局地可见性、全球路径和地图输出
- 新增 SVG、GeoJSON、KML 天象输出及凌日、月掩和月缘地形相关缓存与几何求解
- 新增恒星星表导入与查询,支持 CSV、Hipparcos、BSC5、Stellarium 等格式及名称、交叉标识、锥面检索和星等过滤
- 补充 IAU 2006、地球定向、折射消光、大气观测、轨道传播及半解析行星/月球数据支持
- 将默认未来民用时标切换为 TimeScaleLeapHour,更新 2027–2400 农历速查表、中文日期解析和时区边界处理
- 增加事件基线、跨模型回归、几何边界、月缘地形和输出契约测试,完善中英文手册、示例资源、NOTICE 与忽略规则
2026-10-15 23:54:15 +08:00

76 lines
2.8 KiB
Go

package jupiter
import (
"time"
"b612.me/astro/basic"
)
// GalileanSatellitePosition 木星伽利略卫星视位置 / apparent position of a Galilean satellite.
//
// Jovicentric* 为木心 J2000 平赤道直角坐标与速度,单位 AU / AU-day。
// ApparentRA/Dec 为该卫星的地心天体测量赤经赤纬,单位度。
// OffsetX/OffsetY 以木星中心为原点,分别沿天球东、北方向为正。
// Jovicentric* are Jovicentric J2000 mean-equatorial coordinates and velocities in AU / AU-day.
// ApparentRA/Dec are geocentric astrometric right ascension and declination in degrees.
// OffsetX/OffsetY are measured from Jupiter's center, positive to celestial east and north.
type GalileanSatellitePosition struct {
JovicentricX float64
JovicentricY float64
JovicentricZ float64
JovicentricVX float64
JovicentricVY float64
JovicentricVZ float64
ApparentRA float64
ApparentDec float64
EarthDistance float64
OffsetXArcsec float64
OffsetYArcsec float64
OffsetXJupiterR float64
OffsetYJupiterR float64
OffsetZJupiterR float64
InFrontOfJupiter bool
}
// GalileanSatellitesInfo 四颗伽利略卫星视位置 / apparent positions of the four Galilean satellites.
type GalileanSatellitesInfo struct {
Io GalileanSatellitePosition
Europa GalileanSatellitePosition
Ganymede GalileanSatellitePosition
Callisto GalileanSatellitePosition
}
// Satellites 木星四颗伽利略卫星视位置 / apparent positions of Jupiter's four Galilean satellites.
func (module *Jupiter) Satellites(date time.Time) GalileanSatellitesInfo {
jde := basic.UTC2TT(basic.Date2JD(date.UTC()))
observations := basic.JupiterGalileanSatelliteObservationsWithInstance(jde, module.inst)
return GalileanSatellitesInfo{
Io: galileanSatellitePositionFromBasic(observations[0]),
Europa: galileanSatellitePositionFromBasic(observations[1]),
Ganymede: galileanSatellitePositionFromBasic(observations[2]),
Callisto: galileanSatellitePositionFromBasic(observations[3]),
}
}
func galileanSatellitePositionFromBasic(observation basic.JupiterGalileanObservation) GalileanSatellitePosition {
return GalileanSatellitePosition{
JovicentricX: observation.State.X,
JovicentricY: observation.State.Y,
JovicentricZ: observation.State.Z,
JovicentricVX: observation.State.VX,
JovicentricVY: observation.State.VY,
JovicentricVZ: observation.State.VZ,
ApparentRA: observation.RA,
ApparentDec: observation.Dec,
EarthDistance: observation.Distance,
OffsetXArcsec: observation.OffsetXArcsec,
OffsetYArcsec: observation.OffsetYArcsec,
OffsetXJupiterR: observation.OffsetXJupiterRadii,
OffsetYJupiterR: observation.OffsetYJupiterRadii,
OffsetZJupiterR: observation.OffsetZJupiterRadii,
InFrontOfJupiter: observation.InFrontOfJupiter,
}
}