SwiftAA • aa-js • QLFits • FITSImporter • ObjCFITSIO
最全面的精确天文算法集合,采用 C++ 和 Swift 编写,全部汇集于此。
(可通过所有分发机制获取:Swift Package Manager、Cocoapods 和 Carthage。)
其他实现:JavaScript (aa-js), C# (AASharp)。
SwiftAA 提供了构建太阳系、计算季节长度、月相、确定升起、中天和降落时间、获取大型行星卫星的位置、转换坐标、确定行星的物理细节(如光照、距离等)所需的一切。 具有专业级的精度。
SwiftAA 已在生产应用中使用。 特别是 MeteorActive,这是一款精心打造的 iOS 应用程序,可获取关于流星的一切信息。
SwiftAA 最初是基于 P.J. Naughter 的 C++ 实现层构建的,该实现参考了 Jean Meeus 的权威教科书《天文算法》(第 2 版,亚马逊)。 这个 C++ 包被称为 AA+(见下文)。 AA+ 还包括 VSOP87 框架的附加算法,并完全支持 ELP/MPP02 理论。 因此,感谢 AA+,SwiftAA 是 Swift 中最完整和最精确的天文算法集合。
但是 SwiftAA 提供了更现代化和更易读的 API,充分利用了 Swift 的表达能力及其各种语法元素,使其使用起来既有趣又容易。 实际上,如果您没有 AA 书籍,您根本无法使用 AA+。 而 SwiftAA 的设计宗旨是让任何人都能轻松访问。 添加了额外的函数和算法,以进一步提高完整性和易用性。 特别是,与 C++ API 相比,SwiftAA 提供了更强大的单位安全性。
此外,SwiftAA 具有更大的单元测试覆盖率(Swift 代码 >90%!)。 实际上,单元测试是根据直接取自 Jean Meeus 教科书、AA+ 自身测试、USNO、SkySafari 和 Xephem 的数据精心编写的(因此试图在这些来源之间实现可能存在的假设一致性)。
从代码本身生成的文档可在 http://onekiloparsec.github.io/SwiftAA 获取。
使用 Swift Package Manager:可以通过 Xcode > File > Swift Packages > Add Package Dependency... 并输入此仓库 URL(包括 .git
扩展名),然后选择 SwiftAA
目标。 或者在您的 Package.swift
文件的 dependencies
部分添加代码行 .package(url: "https://github.com/onekiloparsec/SwiftAA.git", from: "3.0.0")
。
使用 Carthage:将 github "onekiloparsec/SwiftAA"
添加到您的 Cartfile
,然后运行 carthage update
,最后将新构建的 SwiftAA-macOS.framework
或 SwiftAA-iOS.framework
添加到您的项目(在 embedded binaries
中)。
使用 CocoaPods:将 pod 'SwiftAA'
添加到您的 Podfile
,然后运行 pod update
。
AABridge
库只是 AA+
提供的 C++ 代码库和 SwiftAA
中的 Swift 代码之间的桥梁。 它完全用 C 语言实现。 建议您直接使用 A++
C++ 代码或 SwiftAA
Swift 包装器。
长期以来,所有的 C++、(Objective-)C++ 和 Swift 代码都捆绑在一起。 但是为了通过 SPM 分发 SwiftAA,必须将源代码拆分到单独的文件夹中。 然后,在 Package.swift
文件中声明了三个不同的库并分别构建,每个库都依赖于前一个库(AA+
,然后是 AABridge
,最后是 SwiftAA
)。
在那次演变过程中,我们选择在 Xcode 项目中创建一个特定的 AABridge
目标。 结果是必须在需要它的 SwiftAA
源文件中导入 AABridge
。 这没什么大不了的,除了 Cocoapods 不理解这种微妙之处。 因此,我们创建了一个特定的 AABridge
pod,它将遵循主包的版本号。
总之,我们有
AA+
、AABridge
和 SwiftAA
。 仅嵌入您打算在项目中使用到的最后一层。AABridge
(包括 AA+
)、SwiftAA-iOS
和 SwiftAA-macOS
。AABridge
和 SwiftAA
。AA+ 框架由 PJ Naughter(Visual C++ MVP)用 C++ 编写,无疑是 Jean Meeus 参考教科书《天文算法》中“天文算法”的最佳和最完整的实现。 要充分利用此代码,您必须随身携带这本书的副本(如果不了解它们所指的内容,则 API 和方法名称几乎无法理解)。
仅接受关于 C++ 和 Swift 代码的 pull 请求。 AA+ 代码更改必须定向到原始来源(如果我需要,我会亲自这样做,请参阅 AA+ 网站)。
SwiftAA 中使用的当前 AA+ 版本是 2.50(发布于 2023 年 4 月 16 日)。
坐标计算是现代天文学的关键。 但是,在 Jean Meeus 的教科书中,以及在 AA+ 代码中,都没有提及现代约定(如 ICRS)。 在等待此类改进的同时,任何想要计算坐标转换的用户都应谨慎。 有关此类转换的完整实现的良好示例,请参阅 AstroPy 优秀软件包。
无需赘言 C、C++、Objective-C 和 Swift 之间的语法差异有多大。 编写 SwiftAA 的主要指导原则是构建一个 C++ 层,该层严格遵循底层 C++ 库的方法和接口。 只有一些变量的名称有点“Objective-C 化”(以避免用单字母类型前缀它们,例如 'b' 代表布尔值等)。
由于 C 缺少命名空间,因此一切都必须加上前缀。 在 Objective-C 中,习惯使用 3 个字母的前缀。 KPC 代表“kiloparsec”,是我常用的前缀。 我选择保留属于 C++ 库的 AA 前缀。 因此,所有方法都带有(相当长的)5 个字母的 KPCAA 前缀。
首先拥有 C 层的约束来自于以下事实:不能在 Swift 代码旁边(在同一文件中)直接编写 C++ 代码。 并且 Swift 没有头文件/实现文件拆分为不同文件。 因此,必须在其周围编写 Objective-C++/C 包装器,并带有名称前缀。 此外,此代码库与 Linux 上的 Swift 兼容,并且 Objective-C 在很大程度上在那里不可用 - 因此 AABridge
层是用 C 构建的。
对于 Swift4,请参阅 swift4
分支。 Swift3 也是如此(未维护)。
Cédric Foellmi,又名 @onekiloparsec (网站)。
(天体物理学博士,前智利 欧洲南方天文台 支持天文学家)。
我是应用程序 iObserve 的作者,适用于 macOS (以及之前的 [iOS/iPad])和 arcsecond.io。
您可以通过在 Patreon 上支持我 来帮助我花更多时间在天文学家的开源软件上!
本软件的许可证是 MIT 许可证,允许您在开源或商业产品中自由使用它。 但它不适用于 AA+ 框架,该框架保留其自己的许可证。 引用 原文
AA+ 版权