106 lines
5.5 KiB
Go
106 lines
5.5 KiB
Go
|
|
package eclipse
|
|||
|
|
|
|||
|
|
import "b612.me/astro/basic"
|
|||
|
|
|
|||
|
|
// SolarEclipseBesselianPolynomial 是三次多项式系数,索引 n 对应 t 的 n 次幂,t 为自 T0 起算的 TT 小时数。
|
|||
|
|
// SolarEclipseBesselianPolynomial holds the cubic coefficients; index n multiplies t^n with t in TT hours from T0.
|
|||
|
|
type SolarEclipseBesselianPolynomial = basic.SolarEclipseBesselianPolynomial
|
|||
|
|
|
|||
|
|
// SolarEclipseBesselianElementsOptions 是贝塞尔根数表的生成选项 / options for a Besselian element table.
|
|||
|
|
type SolarEclipseBesselianElementsOptions struct {
|
|||
|
|
// Model 月亮半径模型,零值为 NASA bulletin Split-K / lunar radius model.
|
|||
|
|
Model SolarEclipseRadiusModel
|
|||
|
|
// SunRadiusModel 太阳半径口径,零值为标准档 / solar radius convention.
|
|||
|
|
SunRadiusModel SolarEclipseSunRadiusModel
|
|||
|
|
// DeltaTSeconds 显式 ΔT(秒),<=0 用进程级模型,只改变地球自转相位 / explicit ΔT in seconds.
|
|||
|
|
DeltaTSeconds float64
|
|||
|
|
// ReferenceJDE 多项式参考时刻 T0(TT 儒略日),<=0 取离食甚最近的整 TT 小时 / TT reference instant, the whole hour nearest greatest eclipse.
|
|||
|
|
ReferenceJDE float64
|
|||
|
|
// ValidHours 有效窗口半径(小时),<=0 取 3 / validity window half-width in hours.
|
|||
|
|
ValidHours float64
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// SolarEclipseBesselianElementsResult 是一次日食的多项式贝塞尔根数及其口径 / polynomial Besselian elements and their conventions.
|
|||
|
|
type SolarEclipseBesselianElementsResult struct {
|
|||
|
|
// T0JDE 多项式参考时刻(TT 儒略日),t = (jde - T0JDE) * 24 / TT reference instant.
|
|||
|
|
T0JDE float64
|
|||
|
|
// ValidHours 有效窗口半径(小时) / validity window half-width.
|
|||
|
|
ValidHours float64
|
|||
|
|
// X 与 Y 是月心在基本面内的坐标,单位地球赤道半径 / fundamental-plane coordinates in equatorial Earth radii.
|
|||
|
|
X, Y SolarEclipseBesselianPolynomial
|
|||
|
|
// D 是影轴赤纬,单位度 / declination of the shadow axis in degrees.
|
|||
|
|
D SolarEclipseBesselianPolynomial
|
|||
|
|
// L1 与 L2 是基本面内的半影、本影半径,单位地球赤道半径;本影为负表示月心尚未越过本影锥顶点。
|
|||
|
|
// L1 and L2 are the penumbral and umbral radii in the fundamental plane, in equatorial Earth radii.
|
|||
|
|
L1, L2 SolarEclipseBesselianPolynomial
|
|||
|
|
// Mu 是影轴格林时角,单位度,窗口内连续、不折回 [0,360)。
|
|||
|
|
//
|
|||
|
|
// 口径与已发布根数表不同:本库的恒星时取自 UT = TT - ΔT,得到真实格林时角;已发布表改用 T0 本身
|
|||
|
|
// 的恒星时,两者相差 ΔT × 15.041067/3600 度。要对表先用 SolarEclipseBesselianMuForPublishedTable。
|
|||
|
|
// Mu is the shadow axis' Greenwich hour angle in degrees, continuous and not folded into [0,360).
|
|||
|
|
Mu SolarEclipseBesselianPolynomial
|
|||
|
|
// TanF1 与 TanF2 是半影、本影锥半顶角正切,本次日食内为常数 / cone half-angle tangents, constant over the eclipse.
|
|||
|
|
TanF1, TanF2 float64
|
|||
|
|
// Gamma 是食甚时刻影轴到地心的距离,单位地球赤道半径 / shadow-axis distance from the Earth's centre.
|
|||
|
|
Gamma float64
|
|||
|
|
// Magnitude 是食甚时刻的全局食分 / global eclipse magnitude at greatest eclipse.
|
|||
|
|
Magnitude float64
|
|||
|
|
// Model、SunRadiusModel、PenumbralK、UmbralK 与 DeltaTSeconds 是决定上述数值的口径 / the conventions behind the numbers above.
|
|||
|
|
Model SolarEclipseRadiusModel
|
|||
|
|
SunRadiusModel SolarEclipseSunRadiusModel
|
|||
|
|
PenumbralK float64
|
|||
|
|
UmbralK float64
|
|||
|
|
DeltaTSeconds float64
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// SolarEclipseBesselianElements 计算给定近朔时刻附近一次日食的多项式贝塞尔根数,窗口内无日食时返回 false。
|
|||
|
|
// Polynomial Besselian elements for the solar eclipse near the given new-moon instant.
|
|||
|
|
func SolarEclipseBesselianElements(
|
|||
|
|
seedJDE float64, options SolarEclipseBesselianElementsOptions,
|
|||
|
|
) (SolarEclipseBesselianElementsResult, bool) {
|
|||
|
|
result, ok := basic.SolarEclipseBesselianElements(seedJDE, basic.SolarEclipseBesselianElementsOptions{
|
|||
|
|
Model: basic.SolarEclipseRadiusModel(options.Model),
|
|||
|
|
SunRadiusModel: basic.SolarEclipseSunRadiusModel(options.SunRadiusModel),
|
|||
|
|
DeltaTSeconds: options.DeltaTSeconds,
|
|||
|
|
ReferenceJDE: options.ReferenceJDE,
|
|||
|
|
ValidHours: options.ValidHours,
|
|||
|
|
})
|
|||
|
|
if !ok {
|
|||
|
|
return SolarEclipseBesselianElementsResult{}, false
|
|||
|
|
}
|
|||
|
|
return solarEclipseBesselianElementsFromBasic(result), true
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// SolarEclipseBesselianMuForPublishedTable 把本库的 Mu 换算成与已发布根数表直接可比的取值。
|
|||
|
|
// 已发布表用 T0 本身的恒星时,本库用 UT = TT - ΔT,两者只差一个常数,因此只有常数项平移。
|
|||
|
|
// SolarEclipseBesselianMuForPublishedTable shifts Mu onto the argument used by published element tables.
|
|||
|
|
func SolarEclipseBesselianMuForPublishedTable(
|
|||
|
|
mu SolarEclipseBesselianPolynomial, deltaTSeconds float64,
|
|||
|
|
) SolarEclipseBesselianPolynomial {
|
|||
|
|
return basic.SolarEclipseBesselianMuForPublishedTable(mu, deltaTSeconds)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func solarEclipseBesselianElementsFromBasic(
|
|||
|
|
result basic.SolarEclipseBesselianElementsResult,
|
|||
|
|
) SolarEclipseBesselianElementsResult {
|
|||
|
|
return SolarEclipseBesselianElementsResult{
|
|||
|
|
T0JDE: result.T0JDE,
|
|||
|
|
ValidHours: result.ValidHours,
|
|||
|
|
X: result.X,
|
|||
|
|
Y: result.Y,
|
|||
|
|
D: result.D,
|
|||
|
|
L1: result.L1,
|
|||
|
|
L2: result.L2,
|
|||
|
|
Mu: result.Mu,
|
|||
|
|
TanF1: result.TanF1,
|
|||
|
|
TanF2: result.TanF2,
|
|||
|
|
Gamma: result.Gamma,
|
|||
|
|
Magnitude: result.Magnitude,
|
|||
|
|
Model: mapBasicSolarEclipseModel(result.Model),
|
|||
|
|
SunRadiusModel: result.SunRadiusModel,
|
|||
|
|
PenumbralK: result.PenumbralK,
|
|||
|
|
UmbralK: result.UmbralK,
|
|||
|
|
DeltaTSeconds: result.DeltaTSeconds,
|
|||
|
|
}
|
|||
|
|
}
|