0

在我的程序中,我正在处理使用 CMMotionManager 跟踪设备运动并使用设备姿态的四元数表示。为了在全局坐标系中定位设备,我需要做一些涉及四元数的基本计算。为此,我想编写一些实现了所有需要的功能的四元数类。有人知道什么是正确的方法,或者可能是一些一般指导方针应该如何做。我从 Apple 找到了一个示例项目,其中包含用 cpp 编写的 Quaternion、Vector2 和 Vector3 类,但我认为在 Cocoa 中使用它们并不是很容易,因为我无法在 Obj-C 标头中定义对象的属性使用这些 c++ 类的文件。还是我错了?谢谢你。

4

2 回答 2

1

您很可能对 OpenGL 根本不感兴趣,但作为 GLKit 的一部分,Apple 提供了GLKQuaternion. 它有一个 C 接口,但应该很容易外推到一个类中。建议使用它而不是直接表达数学,因为它可能尽可能充分地使用数学向量单元。

或者,您可以直接声明 C++ 和 Objective-C 对 GLKQuaternion 的使用,因为这两个都是超集 C。

于 2012-10-16T16:51:29.967 回答
1

你在这里问了多个问题。如何实现 Quaternion 类,如何使用它们来表示方向(态度),如何将 C++ 实现与 Objective C 集成,如何将所有这些集成到 Cocoa 中。我会用一个问题来回答最后一个问题:Cocoa 真的需要知道你在后台使用什么来代表态度吗?

有很多现有的包使用四元数来表示三维空间中的方向。艾根就是其中之一。还有很多其他的。不要重新发明轮子。您确实需要注意一些问题,尤其是在使用第三方软件包时。请参阅从四元数查看矩阵。如果您向下滚动并查看其他一些答案,您会发现其他人提到的两个包都受到我在回答中谈到的问题的影响。

请注意:我并不是说不要使用四元数。那将是相当虚伪的;我一直在使用它们。它们作为表示旋转的紧凑方式工作得非常好。您只需要提防问题,主要是因为太多使用它们/为他们实施软件的人对这些问题一无所知。

于 2012-10-16T16:54:30.680 回答