SwiftAAaa-jsQLFitsFITSImporterObjCFITSIO

SwiftAA

Travis Codecov Carthage compatible FOSSA Status

最全面的精确天文算法集合,采用 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+ 自身测试、USNOSkySafariXephem 的数据精心编写的(因此试图在这些来源之间实现可能存在的假设一致性)。

文档

从代码本身生成的文档可在 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.frameworkSwiftAA-iOS.framework 添加到您的项目(在 embedded binaries 中)。

使用 CocoaPods:将 pod 'SwiftAA' 添加到您的 Podfile,然后运行 pod update

注释

AABridge

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+

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+ 版权

FOSSA

FOSSA Status