第十二章 格林威治恒星时 Sidereal Time at Greenwich
1. 恒星时
恒星时是天文学和大地测量学标示的天球子午圈值,由于借用了时间的计量单位,所以常被误解为是一种时间单位。恒星时是根据地球自转来计算的,它的基础是恒星日(比地球的自转周期短约8.4毫秒)。由于地球环绕太阳的公转运动,恒星日比平太阳日(也就是日常生活中所使用的日)短约1/365(相应约四分钟或一度)。
恒星时的定义是一个地方的子午圈与天球的春分点之间的时角,因此地球上每个地方的恒星时都与它的经度有关。
由于地球的章动春分点在天球上并不固定,而是以18.6年的周期围绕着平均春分点摆动。因此恒星时又分真恒星时和平恒星时。真恒星时是通过直接测量子午线与实际的春分点之间的时角获得的,平恒星时则忽略了地球的章动。真恒星时与平恒星时之间的差异最大可达约0.4秒。
一个地方的当地恒星时与格林尼治天文台的恒星时之间的差就是这个地方的经度(参见天体导航)。因此通过观测恒星时可以确定当地的经度(假如格林尼治天文台的恒星时已知的话)或者可以确定时间(假如当地的经度已知的话)。
- 一颗恒星的时角$\tau$ 、它的赤经$α$和当地的恒星时$θ$之间的关系为 $\tau=\theta -\alpha$
- 当地的恒星时等于位于天顶的恒星的赤经
- 当地的恒星时等于正位于中天恒星的赤经
通过确定恒星时可以简化天文学的计算,比如通过恒星时和当地的纬度可以很方便地计算出哪些星正好在地平线以上。
2. 恒星时的计算
2.1 格林威治0h平恒星时
一个给定的世界时日期的(0h UT),格林尼治子午圈的平恒星时可按如下计算。
1. 先计算当天(0h UT)对应的$JD$
2. 计算$T = \frac {JD - 2451545.0}{36525}$
3. 采用 IAU1982 的格林尼治子午圈的平恒星时表达式: $$θ_0 = 6h41m50s.54841 + 8640184s.812866T + 0s.093104T^2 - 0s.0000062T^3$$
4. 若以度为单位,则上式为:$$θ_0 = 100.46061837 + 36000.770053608T + 0.000387933T^2 - T^3 / 38710000$$
注意,上述公式只适用于(0h UT)
// jdToCFrac returns values for use in computing sidereal time at Greenwich.
//
// Cen is centuries from J2000 of the JD at 0h UT of argument jd. This is
// the value to use for evaluating the IAU sidereal time polynomial.
// DayFrac is the fraction of jd after 0h UT. It is used to compute the
// final value of sidereal time.
// 计算 T = cen,dayFrac 为此 jd 对应的天的小数
func jdToCFrac(jd float64) (cen, dayFrac float64) {
j0, f := math.Modf(jd + .5)
return base.J2000Century(j0 - .5), f
}
// J2000Century returns the number of Julian centuries since J2000.
//
// The quantity appears as T in a number of time series.
func J2000Century(jde float64) float64 {
// The formula is given in a number of places in the book, for example
// (12.1) p. 87.
// (22.1) p. 143.
// (25.1) p. 163.
return (jde - J2000) / JulianCentury
}
// Mean0UT returns mean sidereal time at Greenwich at 0h UT on the given JD.
//
// The result is in the range [0,86400).
// 计算格林威治 0h UT 平恒星时,并化简为单位为秒一天之内的值[0,86400).
func Mean0UT(jd float64) unit.Time {
s, _ := mean0UT(jd)
return s.Mod1()
}
// 计算格林威治 0h UT 平恒星时,并返回此 jd 一天中相对于0h的秒数,用于瞬时平恒星时的计算
func mean0UT(jd float64) (sidereal, dayFrac unit.Time) {
cen, f := jdToCFrac(jd)
// (12.2) p. 87
return unit.Time(base.Horner(cen, iau82...)), unit.TimeFromDay(f)
}
2.2 格林威治任意 UT 平恒星时
1. 计算0h 平恒星时
2. UT * 1.00273790935
3. 1 + 2 的结果即为格林威治瞬时平恒星时
4. 若以度为单位,则:$$θ_0 = 280.46061837 + 360.98564736629(JD-2451545.0) + 0.000387933T^2 - T^3 / 38710000$$
// Mean returns mean sidereal time at Greenwich for a given JD.
//
// Computation is by IAU 1982 coefficients.
// The result is in the range [0,86400).
// 计算格林威治 jd 时刻的瞬时平恒星时,化简结果至一天范围之内
func Mean(jd float64) unit.Time {
return mean(jd).Mod1()
}
// 计算格林威治 jd 时刻的瞬时平恒星时
func mean(jd float64) unit.Time {
s, f := mean0UT(jd)
return s + f*1.00273790935
}
2.3 格林威治视恒星时
要取得视恒星时,即真春分点起算的格林尼治时角,应加上修正值 $Δψ\cos ε$,式中 $Δψ$ 是黄经章动,$ε$ 是真黄赤交角。这个修正值也就作赤经章动(也称作分点方程)。因为 $Δψ$ 是个小量,所以 $ε$ 误差 10”也没关系。
如果 $Δψ$ 的单位是角秒(1 度是 3600 秒),则以时秒(1 小时是 3600 秒)为单位的修正值是:$\frac {Δψ\cos ε}{15}$
// Apparent returns apparent sidereal time at Greenwich for the given JD.
//
// Apparent is mean plus the nutation in right ascension.
//
// The result is in the range [0,86400).
// 计算格林威治瞬时视恒星时
func Apparent(jd float64) unit.Time {
s := mean(jd) // Time
n := nutation.NutationInRA(jd) // HourAngle
return (s + n.Time()).Mod1()
}
// Apparent0UT returns apparent sidereal time at Greenwich at 0h UT
// on the given JD.
//
// The result is in the range [0,86400).
// 计算格林威治0h UT视恒星时
func Apparent0UT(jd float64) unit.Time {
j0, f := math.Modf(jd + .5)
cen := (j0 - .5 - base.J2000) / 36525
s := unit.Time(base.Horner(cen, iau82...)) +
unit.TimeFromDay(f*1.00273790935)
n := nutation.NutationInRA(j0) // HourAngle
return (s + n.Time()).Mod1()
}