ObjCAA 2.4.0

ObjCAA 2.4.0

Cedric Foellmi 维护。



ObjCAA 2.4.0

SwiftAAaa-jsQLFitsFITSImporterObjCFITSIO

Become a Patreon

SwiftAA(和ObjCAA)

Travis Codecov Carthage compatible FOSSA Status

准确的天体算法最全面集合,包括 C++、Objective-C 和 Swift,全在一个地方。

(通过所有分发机制:Swift 包管理器、CocoaPods 和 Carthage。)

其他实现:JavaScript(aa-js)C#(AASharp)

下面对 ObjCAA 和 SwiftAA 之间的区别进行说明。

描述

SwiftAA 提供了构建我们太阳系所需的一切,包括计算季节长度、月相、确定升起、经过和落下的时间、获取大型行星卫星的位置、转换坐标、确定行星的物理细节,它们的照明、距离等。具有专业级的准确性。

SwiftAA 已在生产应用中使用。特别是,MeteorActive,这是一个精心制作的 iOS 应用,可以获取有关流星的所有信息。

SwiftAA 首先是用 C++ 实现基于 P.J. Naughter 的参考教科书《天体算法》(作者:Jean Meeus,2 版,Amazon)的 Objective-C(++) 层构建的。这个 C++ 包称为 AA+(见下文)。AA+ 还包括 VSOP87 框架的附加算法,并完全支持 ELP/MPP02 理论。因此,SwiftAA,得益于 AA+,是 Swift 中最完整和最准确的天体算法集合。

SwiftAA 提供了更多现代且可读性更高的 API,利用了 Swift 的表现力和其各种语法元素,使使用变得有趣且简单。事实上,您根本无法在没有 AA 书的情况下使用 AA+。而 SwiftAA 正是专门为任何人制作的。添加了额外的功能和算法,以进一步提高完整性和易用性。特别是,SwiftAA 提供了比 C++ API 更强的单元安全性

此外,SwiftAA的单元测试覆盖率非常高(Swift代码大于90%)!实际上,单元测试是根据Jean Meeus教材中的数据仔细编写的,包括AA+自己的测试、USNO,SkySafari,Xephem等数据(并且尽可能在这几个来源之间实现可能假设的一致性)。

文档

从自身代码生成的文档可在http://onekiloparsec.github.io/SwiftAA找到。

安装

使用Swift包管理器:通过Xcode > 文件 > Swift包 > 添加包依赖... ,然后输入此存储库URL(包括.git扩展名),然后选择SwiftAA目标。或者在您的Package.swift文件的dependencies部分中添加以下行.package(url: "https://github.com/onekiloparsec/SwiftAA.git", from: "2.2.2")

使用Carthage:将github "onekiloparsec/SwiftAA"添加到您的Cartfile中,然后运行carthage update,最后将新构建的SwiftAA-macOS.frameworkSwiftAA-iOS.framework添加到您的项目(在嵌入式二进制文件中)。

使用CocoaPods:在您的Podfile中添加pod 'SwiftAA',或pod 'ObjCAA',然后运行pod update

注意

ObjCAA

长期以来,所有的C++、Objective-C++和Swift代码都被捆绑在一起。但是,为了通过SPM分发SwiftAA,需要将源代码分割到单独的文件夹中。然后在Package.swift文件中声明了三个不同的库,并且分别构建,每个库都依赖于前一个(AA+,然后是ObjCAA,最后是SwiftAA)。

在这次演变过程中,我们选择在Xcode项目中创建一个特定的ObjCAA目标。结果是,ObjCAA必须导入到需要它的SwiftAA源文件中。这不是什么大问题,除非是Cocoapods,因为它不理解这种微妙之处。因此,我们创建了一个特定的ObjCAA pod,它将遵循主包的版本号。

总之,我们有:

  • 通过Swift包管理器可获得三个目标:AA+ObjCAASwiftAA。只在项目中使用你打算使用的最后一级别。
  • 通过Carthage,在Xcode项目内部可获得三个目标:ObjCAA(包括AA+)、SwiftAA-iOSSwiftAA-macOS
  • 通过Cocoapods可获得两个pod:ObjCAASwiftAA

AA+

A+框架,由PJ Naughter(Visual C++ MVP)用C++编写,无疑是“天文学算法”最完整、最佳的实施,这些算法可以在Jean Meeus的参考教科书中找到。为了充分利用此代码,您必须有一本此书的副本(API和方法名称在没有了解它们所引用的内容的情况下几乎无法理解)。

只接受关于Objective-C(++)和Swift代码的pull请求。AA+代码的更改必须针对原始源代码(参见AA+网站)。

SwiftAA目前正在使用的AA+版本为2.44(2022年7月14日发布)。

注意坐标

坐标计算是现代天文学的关键。然而,Jean Meeus的教科书中没有提及现代惯例(如ICRS),因此在AA+代码中也没有提及。在等待这种改进的同时,任何想要计算坐标变换的用户都应该小心。一个完整的实现此类变换的良好示例是AstroPy出色的包

前缀和惯例

不用说C、C++、Objective-C和Swift之间语法有多么不同。编写SwiftAA的主要准则是构建一个严格遵循底层C++库方法和接口的Objective-C(++)层。只有一些变量的名称进行了一些“Objective-C化”(为了避免用单字母类型前缀,例如'b'对于布尔值等)。

由于Objective-C缺乏命名空间,所有内容都必须前缀化。在Objective-C中,使用3个字母的前缀是一种惯例。KPC代表“千秒差距”,是我的惯用前缀。我选择保留属于C++库的AA前缀。因此所有方法的(相当长)5个字母的KPCAA前缀。

首先有Objective-C层的约束来自于无法直接在Swift代码(在同一文件中)旁边编写C++代码的事实。而且Swift也没有将头文件/实现分开到不同的文件中。因此必须为它编写一个带有名称前缀的Objective-C++/C包装器。

分支

关于Swift4,参见swift4分支。同样,对于Swift3(已不再维护)。

作者

Cédric Foellmi,又称@onekiloparsec网站)。
(天体物理学博士,曾在智利欧洲南方天文台任支持天文学家)。
我是iObserve应用的作者(适用于macOS(以及以前在[iOS/iPad]中)和arcsecond.io)。

支持

您可以通过在Patreon上支持我来帮助我花更多时间在为天文学家开源软件上!

许可协议

本软件的许可协议是MIT许可协议,这允许您在开源或商业产品中自由使用它。但此协议不适用于AA+框架,它保留了自己的许可协议。引用原始内容

AA+版权

  • 当您以二进制形式发布产品(商业软件、共享软件、免费软件或其他形式)时,您可以将其源代码包含在任何产品中。
  • 您可以随意修改源代码,ただし、模块顶部的版权详细信息は変更できません。
  • 如果您想与您的应用程序一起分发源代码,则只能分发作者发布的版本。这是为了保持源代码的单点分发。

FOSSA

FOSSA Status