SwiftAstro

用于天文学的 Swift 包。

关于 SwiftAstro。

SwiftAstro 是一个 Swift 包,它提供:

耶鲁亮星目录。

SwiftAstro.brightStarCatalog 属性提供对 BrightStarCatalog 实例的访问。

stars 属性提供对目录中所有恒星的访问。该目录也可以通过哈佛修订星号 (HR) 进行下标访问。

示例: 查找织女星(HR 编号 7001)的视星等。

if let vega = SwiftAstro.brightStarCatalog[7001] {
  print(vega.visualMagnitude).        // 0.03
}

示例: 查找所有视星等为 1.0 或更低的恒星。

let brightest = SwiftAstro.brightStarCatalog.stars.filter {
  star in

  guard let magnitude = star.visualMagnitude else {
    return false
  }
            
  return magnitude <= 1.0
}

天文计算。

行星的日心位置。

行星由 Planet 枚举类型列举。heliocentricPosition 函数返回给定儒略日的行星日心位置。该算法对 VSOP87B 理论中的项进行求和,结果以球坐标形式给出。

示例: 计算儒略日 2460156.0(2023 年 7 月 30 日中午)火星的位置。

let t = SwiftAstro.Time(julianDays: 2460156.0)
let posn = SwiftAstro.Planet.mars.heliocentricPosition(t: t)

给出经度 -3.0927667317253196 弧度,纬度 0.023473327404147742 弧度,以及半径 1.6478994217781984 天文单位(火星和太阳之间的距离)。

行星的地心位置。

计算从地球观察行星时,相对于恒星背景的行星视地心位置。

示例: 计算 2024 年 2 月 10 日 19:00 UTC 金星的位置。

let t = SwiftAstro.Time(2024, 02, 10, 19, 0, 0)
let (lon, lat) = SwiftAstro.Planet.venus.geocentricPosition(t: t)

print(lon.rightAscension.description, lat.degreesMinutesSeconds)

给出行星的赤经为 19 时 36 分 37.569 秒,赤纬为 -021° 25' 22.986"。

与 JPL Horizons(https://ssd.jpl.nasa.gov/horizons/)计算出的 19 时 36 分 39.41 秒和 -21° 25' 21.2" 进行比较。

月球和太阳的地心位置。

计算从地球观察月球或太阳时,相对于恒星背景的月球或太阳视地心位置。

示例: 计算 2024 年 7 月 1 日 15:00 UTC 月球和太阳的位置。

let t = SwiftAstro.Time(2024, 7, 1, 15, 0, 0)

let (raSun, declSun) = SwiftAstro.sun.geocentricPosition(t: t)
print(raSun.rightAscension)            // 06h 43m 08.592s
print(declSun.degreesMinutesSeconds)   // 023° 03' 53.911"

let (raMoon, declMoon) = SwiftAstro.moon.geocentricPosition(t: t)
print(raMoon.rightAscension)          // 02h 49m 21.979s
print(declMoon.degreesMinutesSeconds) // 019° 14' 35.610"

为了比较,JPL Horizons 给出:

冥王星。

冥王星的日心和地心位置可从 SwiftAstro.pluto 结构体中获得。

数据结构。

距离。

SwiftAstro.Distance 数据结构表示天文距离。 基础测量单位是天文单位。 初始化器和访问器也适用于光年、光分、光秒、米和秒差距。

示例: 对于 1 光年的距离,查找以天文单位和秒差距表示的相应距离。

let distance = SwiftAstro.Distance(lightYears: 1.0)
let au = distance.astronomicalUnits    // 63241.07708426628
let pc = distance.parsecs              // 0.30660139378555057

角度。

SwiftAstro.Angle 数据结构表示角度测量。 基础单位是弧度。 访问器和初始化器也适用于度数和角秒。 此外,SwiftAstro.Angle.RightAscension 属性提供了以赤经形式查看角度的方式。 类似地,SwiftAstro.Angle.DegreesMinutesSeconds 属性提供了以 DMS 形式查看角度的方式。 角度也可以使用赤经和 DMS 值进行初始化。

示例: 查找天狼星(耶鲁亮星目录中编号为 2491 的恒星)的赤经和赤纬。

if let sirius = SwiftAstro.brightStarCatalog[2491],
   let ra = sirius.rightAscension?.rightAscension,
   let dec = sirius.declination?.degreesMinutesSeconds
{
  print (ra)               // 06h 45m 08.900s
  print (dec)              // -016° 42' 58.000"
}

时间。

SwiftAstro.Time 数据结构表示时间上的一个时刻。 基础单位是儒略日,它测量自公元前 4713 年 1 月 1 日中午以来的连续天数。

访问器和初始化器也适用于相应的 Foundation DatetimeIntervalSinceReferenceDate

为公历中 UTC 日期/时间提供了一个便捷的初始化器:SwiftAstro.Date(2024, 5,29, 18, 30, 0) 初始化为 2024 年 5 月 29 日 18:30 UTC。

章动。

nutation 实例方法返回一对 SwiftAstro.Angle 值。 第一个值表示实例时间的经度章动,第二个值表示倾斜度章动。 计算方法是米乌斯 (Meeus) 简化版的“1980 IAU 章动理论”,省略了小项(参见 Meeus,1991,第 132 页)。

黄道倾角。

meanObliquityOfTheEcliptic 实例方法返回一个 SwiftAstro.Angle 值,表示实例时间的平均黄道倾角。 计算方法归功于拉斯卡 (Laskar, 1986),引用于米乌斯 (Meeus, 1991, 第 135 页)。

球面位置。

SphericalPosition 结构体表示物体的相对球坐标,以经度、纬度和半径(到原点的距离)表示。

物理常数。

距离。

SwiftAstro.Distance.metersPerAstronomicalUnit SwiftAstro.Distance.metersPerLightYear SwiftAstro.Distance.metersPerLightMinute SwiftAstro.Distance.metersPerLightSecond SwiftAstro.Distance.astronomicalUnitsPerParsec SwiftAstro.Distance.astronomicalUnitsPerLightYear

时间长度。

SwiftAstro.Distance.lightSecondsPerLightYear SwiftAstro.Distance.lightSecondsPerAstronomicalUnit

角度。

SwiftAstro.Angle.meanObliquityOfEclipticAtJ2000

来源。

Bretagnon, P. 和 Francou, G. (1988) 'Planetary Solutions VSOP87', Astronomy and Astrophysics, vol. 202(309B)。

Meeus, J. (1991) 'Astronomical Algorithms', Willmann-Bell: Viriginia, USA。

Hoffleit, D. 和 Warren Jr, W. H. (1991) 'Yale Bright Star Catalog: 5th Revised Edition', 可在 http://cdsarc.u-strasbg.fr/viz-bin/cat/V/50 获取。