天文算法27

第二十九章 Ephemeris for Physical Observations of the Sun

1. 日面计算

$P$ 为日轴方位角,自日面北点量起的太阳自转轴北端的方位角,向东为正
$B_0$ 为日面中心的日面纬度
$L_0$ 为日面中心的日面经度

根据之前章节的算法,先计算太阳视黄经$λ$(包含光行差修正),$λ’$为$λ$的黄经章动修正值,$ε$为真黄赤交角
再计算 \begin{cases} θ = (JD - 2398220)\frac {360°}{25.38}\\[2ex] I = 7°.25,(太阳赤道与黄道的倾角)\\[2ex] K = 73°.6667 + 1°.3958333\frac {JD - 2396758}{36525},(太阳赤道与黄道的升交点的黄经)\\[2ex] \tan x = -\cos λ’\tan ε\\[2ex] \tan y = -\cos (λ - K)\tan I \end{cases} 那么 \begin{cases} P = x+y\\[2ex] \sin B_0 = \sin(λ - K)\sin I\\[2ex] \tan η = \frac {-\sin(λ - K)\cos I}{-\cos (λ - K)}\\[2ex] L_0 = η-θ \end{cases}

// Ephemeris returns the apparent orientation of the sun at the given jd.
// 计算日面参数
//
// Results:
//	P:  Position angle of the solar north pole.
//	B0: Heliographic latitude of the center of the solar disk.
//	L0: Heliographic longitude of the center of the solar disk.
func Ephemeris(jd float64, e *pp.V87Planet) (P, B0, L0 unit.Angle) {
	θ := unit.Angle((jd - 2398220) * 2 * math.Pi / 25.38)
	I := unit.AngleFromDeg(7.25)
	K := unit.AngleFromDeg(73.6667) +
		unit.AngleFromDeg(1.3958333).Mul((jd-2396758)/base.JulianCentury)

	L, _, R := solar.TrueVSOP87(e, jd)
	Δψ, Δε := nutation.Nutation(jd)
	ε0 := nutation.MeanObliquity(jd)
	ε := ε0 + Δε
	λ := L - unit.AngleFromSec(20.4898).Div(R)
	λp := λ + Δψ

	sλK, cλK := (λ - K).Sincos()
	sI, cI := I.Sincos()

	tx := -(λp.Cos() * ε.Tan())
	ty := -(cλK * I.Tan())
	P = unit.Angle(math.Atan(tx) + math.Atan(ty))
	B0 = unit.Angle(math.Asin(sλK * sI))
	η := unit.Angle(math.Atan2(-sλK*cI, -cλK))
	L0 = (η - θ).Mod1()
	return
}

// Cycle returns the jd of the start of the given synodic rotation.
//
// Argument c is the "Carrington" cycle number.
//
// Result is a dynamical time (not UT).
func Cycle(c int) (jde float64) {
	cf := float64(c)
	jde = 2398140.227 + 27.2752316*cf
	m := 281.96*math.Pi/180 + 26.882476*math.Pi/180*cf
	s2m, c2m := math.Sincos(2 * m)
	return jde + .1454*math.Sin(m) - .0085*s2m - .0141*c2m
}

相关

下一页
上一页
comments powered by Disqus