天文算法11

第十三章 坐标的转换 Transformation of Coordinates

1. 天球坐标系统

  天球坐标系统,是天文学上用来描绘天体在天球上位置的坐标系统。有许多不同的坐标系统都使用球面坐标投影在天球上,类似于使用在地球表面的地理坐标系统。这些坐标系统的不同处只在用来将天空分割成两个相等半球的大圆,也就是基面的不同。例如,地理坐标系统的基面是地球的赤道。每个坐标系统的命名都是依据其所选择的基面。

\begin{array}{c|ccc} 坐标系统 & 基面 & 极 & 坐标 \\
\hline 地平 & 地平面 & 天顶/天底 & 高度(也称为仰角) - 方位 - 子午圈 \\
赤道 & 天球赤道 & 天极 & 赤纬 - 赤经或时角 \\
黄道 & 黄道 & 黄极 & 黄纬 - 黄经 \\
银河 & 银河平面 & 银极 & 银经 - 银纬 \\
超星系 & 超星系平面 & & \\
\end{array}

2. 地平坐标系

  地平坐标系,又作地平座标系,是天球坐标系统中的一种,以观测者所在地为中心点,所在地的地平线作为基础平面,将天球适当的分成能看见的上半球和看不见(被地球本身遮蔽)的下半球。上半球的顶点(最高点)称为天顶,下半球的顶点(最低点)称为地底。

地平坐标系统是:

  • 高度角(Altitude, Alt)或仰角又称地平纬度,是天体和观测者所在地的地平线的夹角,有时就称为高度或海拔标高(elevation, geometric height)。
  • 方位角(Azimuth, Az)又称地平经度,是沿着地平线测量的角度(由正北方为起点向东方测量)。

因此地平坐标系有时也被称为高度/方位(Alt/Az)坐标系统。 地平坐标系

注:方位角的测量可以从北点向东测量,也可从南点向西测量,两者相差180°。天文学家习惯从南点开始测量。

3. 赤道坐标系

  赤道坐标系统,又作赤道座标系统,大概是使用得最广泛的天球坐标系统,他的元素是:

  • 赤纬Declination( $\delta$ )
  • 赤经Right ascension( $\alpha$ )-也记为RA

  他与地理坐标系统非常相似,因为两者使用相同的基准平面和相同的极点。地球的赤道在天球上的投影就称为天球赤道,相同的,地理极点在天球上的投影就是天极。

他有两种变化:

  • 时角系统像地理坐标系统一样,被固定在地球的表面上。
  • 赤经系统被固定于恒星上(实际上并非如此,请参考岁差和章动)。

因此,在经过一夜或数个夜晚,就能看出来星星在天空中的位置移动了,当然,这并非恒星在天球上的运动,只是地球运动造成的。因为岁差和章动的影响,在相当长的时间间隔下所做的观测,就必须注明所使用的特殊历元,为行星、恒星、星系等等的位置做记录。现在使用的历元是J2000.0分点,稍早期使用的是B1950.0分点。

赤道坐标系统中与纬度相似的值是赤纬(缩写为Dec.),是天体在天球赤道上方或下方的角度。与经度对应的是赤经(缩写为RA),是与春分点的角度距离,不同于经度的是赤经以时、分、秒为单位,而非度、分、秒。因为地球的运动造成赤道坐标系统的视运动,就会造成恒星时和时角的相对变化。将天球运转一周的时间定为24小时,所以每小时天球会转动15度(360º / 24h = 15)。

赤道坐标系统也是赤道仪上很普通的设备,也就是定位圈。定位圈与星图或星历表上的位置结合,可以让赤道仪很容易的指向已知天体在天球上的位置。 赤道坐标系

4. 黄道坐标系

黄道是由地球上观察太阳一年中在天球上的视运动所通过的路径,若以地球“不动”作参照的话就是太阳绕地球公转的轨道平面(黄道面)在天球上的投影。

黄道与天赤道相交于两点:春分点与秋分点(这两点称二分点);而黄道对应的两个几何极是北黄极(在天龙座)、与南黄极 (在剑鱼座)。

在黄道上与黄道平行的小圆称黄纬,符号β,以由黄道面向北黄极方向为正值(0°至90°),向南黄极方向则为负值。垂直黄道的经度称黄经,符号为λ,由春分点起由西向东量度(0°至360°)。像赤道坐标系中的赤经一样,以春分点做为黄经的起点。

因为地轴有进动现象,此坐标系的两个黄极亦会因岁差影响而使坐标数值逐渐移动,计算时必须说明坐标系参照的历元。现常采用的是J2000.0历元(之前的出版物多以B1950.0历元),在天文年历这类精度较高的刊物中,则参考当天或当月之瞬时分点计算。

此坐标系特别适合标示太阳系内天体的位置,大多数行星(水星和冥王星除外)与许多小行星轨道平面与黄道的倾角都很小,故其黄纬值(β)都不大。

黄道坐标系

5. 坐标系转换

  • $λ$和$β$代表黄经和黄纬
  • $α$和$δ$代表赤经和赤纬
  • $φ,A,h$代表观察者纬度,方位角,和仰角,其中默认A从南点向西测量
  • $ε$黄赤交角

注:如果给定的为视坐标,在转换为本地地平坐标时要先将视赤经(时角)转换为本地时角。
例如:如果θ是本地恒星时,$θ_0$ 是格林尼治恒星时,L 是观者站经度(从格林尼治向西为正,东为负),那么本地时角为$ θ - α 或 θ_0 - L – α$

5.1 赤道转黄道($α,δ\ \Rightarrow\ λ,β$)

\begin{align} \sin β &=\cos ε\sin δ-\sin α\cos δ\sin ε\\[2ex] \cos λ\cos β &=\cos α\cos δ\\[2ex] \sin λ\cos β &=\sin ε\sin δ+\sin α\cos δ\cos ε \end{align}

// Obliquity represents the obliquity of the ecliptic.
// 黄赤交角对应的 sin,cos 值
type Obliquity struct {
	S, C float64 // sine and cosine of obliquity
}

// NewObliquity constructs a new Obliquity.
//
// Struct members are initialized from the given value ε of the obliquity of
// the ecliptic.
// 计算黄赤交角对应的 sin,cos 值
func NewObliquity(ε unit.Angle) *Obliquity {
	r := &Obliquity{}
	r.S, r.C = ε.Sincos()
	return r
}

// Ecliptic coordinates are referenced to the plane of the ecliptic.
// 黄道坐标结构
type Ecliptic struct {
	Lon unit.Angle // Longitude (λ)黄经
	Lat unit.Angle // Latitude (β)黄纬
}

// EqToEcl converts equatorial coordinates to ecliptic coordinates.
// 赤道转黄道
func (ecl *Ecliptic) EqToEcl(eq *Equatorial, ε *Obliquity) *Ecliptic {
	ecl.Lon, ecl.Lat = EqToEcl(eq.RA, eq.Dec, ε.S, ε.C)
	return ecl
}

// EqToEcl converts equatorial coordinates to ecliptic coordinates.
//
//	α: right ascension coordinate to transform
//	δ: declination coordinate to transform
//	sε: sine of obliquity of the ecliptic
//	cε: cosine of obliquity of the ecliptic
//
// Results:
//
//	λ: ecliptic longitude黄经
//	β: ecliptic latitude黄纬
//  赤道转黄道
func EqToEcl(α unit.RA, δ unit.Angle, sε, cε float64) (λ, β unit.Angle) {
	sα, cα := α.Sincos()
	sδ, cδ := δ.Sincos()
	λ = unit.Angle(math.Atan2(sα*cε+(sδ/cδ)*sε, cα)) // (13.1) p. 93
	β = unit.Angle(math.Asin(sδ*cε - cδ*sε*sα))      // (13.2) p. 93
	return
}

5.2 黄道转赤道($λ,β\ \Rightarrow\ α,δ$)

\begin{align} \sin δ &=\sin ε\sin λ\cos β+\cos ε\sin β\\[2ex] \cos α\cos δ &=\cos λ\cos β\\[2ex] \sin α\cos δ &=\cos ε\sin λ\cos β-\sin ε\sin β \end{align}

// Equatorial coordinates are referenced to the Earth's rotational axis.
// 赤道坐标结构
type Equatorial struct {
	RA  unit.RA    // Right ascension (α)赤经(时角)
	Dec unit.Angle // Declination (δ)赤纬
}

// EclToEq converts ecliptic coordinates to equatorial coordinates.
// 黄道转赤道
func (eq *Equatorial) EclToEq(ecl *Ecliptic, ε *Obliquity) *Equatorial {
	eq.RA, eq.Dec = EclToEq(ecl.Lon, ecl.Lat, ε.S, ε.C)
	return eq
}

// EclToEq converts ecliptic coordinates to equatorial coordinates.
//
//	λ: ecliptic longitude coordinate to transform
//	β: ecliptic latitude coordinate to transform
//	sε: sine of obliquity of the ecliptic
//	cε: cosine of obliquity of the ecliptic
//
// Results:
//	α: right ascension赤经(时角)
//	δ: declination赤纬
// 黄道转赤道
func EclToEq(λ, β unit.Angle, sε, cε float64) (α unit.RA, δ unit.Angle) {
	sλ, cλ := λ.Sincos()
	sβ, cβ := β.Sincos()
	α = unit.RAFromRad(math.Atan2(sλ*cε-(sβ/cβ)*sε, cλ)) // (13.3) p. 93
	δ = unit.Angle(math.Asin(sβ*cε + cβ*sε*sλ))          // (13.4) p. 93
	return
}

5.3 地平转赤道($φ,A,h\ \Rightarrow\ α,δ$)

\begin{align} \sin δ &=\sin φ\sin h-\cos φ\cos h\cos A\\[2ex] \cos δ\cos α &=-\cos φ\sin h-\sin φ\cos h\cos A\\[2ex] \cos δ\sin α &=-\sin A\cos h \end{align}

// HzToEq transforms horizontal coordinates to equatorial coordinates.
//
// Sidereal time st must be consistent with the equatorial coordinates
// in the sense that if coordinates are apparent, sidereal time must be
// apparent as well.
// 地平转赤道
func (eq *Equatorial) HzToEq(hz *Horizontal, g globe.Coord, st unit.Time) *Equatorial {
	eq.RA, eq.Dec = HzToEq(hz.Az, hz.Alt, g.Lat, g.Lon, st)
	return eq
}

// HzToEq transforms horizontal coordinates to equatorial coordinates.
//
//	A: azimuth方位角
//	h: elevation仰角
//	φ: latitude of observer on Earth观测纬度
//	ψ: longitude of observer on Earth观测经度
//	st: sidereal time at Greenwich at time of observation.恒星时
//
// Sidereal time must be consistent with the equatorial coordinates
// in the sense that tf coordinates are apparent, sidereal time must be
// apparent as well.
// 恒星时必须和所给条件保持一致
//
// Results:
//
//	α: right ascension赤经(时角)
//	δ: declination赤纬
// 地平转赤道
func HzToEq(A, h, φ, ψ unit.Angle, st unit.Time) (α unit.RA, δ unit.Angle) {
	sA, cA := A.Sincos()
	sh, ch := h.Sincos()
	sφ, cφ := φ.Sincos()
	H := math.Atan2(sA, cA*sφ+sh/ch*cφ)
	α = unit.RAFromRad(st.Rad() - ψ.Rad() - H)
	δ = unit.Angle(math.Asin(sφ*sh - cφ*ch*cA))
	return
}

5.4 赤道转地平($φ,α,δ\ \Rightarrow\ A,h$)

\begin{align} \sin h &= \sin φ\sin δ+\cos φ\cos δ\cos α\\[2ex] \cos A\cos h &=-\cos φ\sin δ+\sin φ\cos δ\cos α\\[2ex] \sin A\cos h &=\cos δ\sin α \end{align}

// Horizontal coordinates are referenced to the local horizon of an observer
// on the surface of the Earth.
// 地平坐标结构
type Horizontal struct {
	Az  unit.Angle // Azimuth (A)方位角
	Alt unit.Angle // Altitude (h)仰角
}

// EqToHz computes Horizontal coordinates from equatorial coordinates.
//
// Argument g is the location of the observer on the Earth.  Argument st
// is the sidereal time at Greenwich.
//
// Sidereal time must be consistent with the equatorial coordinates.
// If coordinates are apparent, sidereal time must be apparent as well.
// 赤道转地平
func (hz *Horizontal) EqToHz(eq *Equatorial, g *globe.Coord, st unit.Time) *Horizontal {
	hz.Az, hz.Alt = EqToHz(eq.RA, eq.Dec, g.Lat, g.Lon, st)
	return hz
}

// EqToHz computes Horizontal coordinates from equatorial coordinates.
//
//	α: right ascension coordinate to transform
//	δ: declination coordinate to transform
//	φ: latitude of observer on Earth
//	ψ: longitude of observer on Earth
//	st: sidereal time at Greenwich at time of observation.
//
// Sidereal time must be consistent with the equatorial coordinates.
// If coordinates are apparent, sidereal time must be apparent as well.
//
// Results:
//
//	A: azimuth of observed point, measured westward from the South.
//	h: elevation, or height of observed point above horizon.
// 赤道转地平
func EqToHz(α unit.RA, δ, φ, ψ unit.Angle, st unit.Time) (A, h unit.Angle) {
	H := st.Rad() - ψ.Rad() - α.Rad()
	sH, cH := math.Sincos(H)
	sφ, cφ := φ.Sincos()
	sδ, cδ := δ.Sincos()
	A = unit.Angle(math.Atan2(sH, cH*sφ-(sδ/cδ)*cφ)) // (13.5) p. 93
	h = unit.Angle(math.Asin(sφ*sδ + cφ*cδ*cH))      // (13.6) p. 93
	return
}

相关

下一页
上一页
comments powered by Disqus