适当地在Cocoa中实现四元数计算?

时间:2012-10-16 16:34:58

标签: c++ objective-c class quaternions

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

2 个答案:

答案 0 :(得分:1)

你可能根本不对OpenGL感兴趣,但作为GLKit的一部分,Apple提供GLKQuaternion。它有一个C接口,但应该很容易推断到一个类。建议使用它直接表达数学,因为它可能尽可能完全使用数学向量单位。

或者你可以直接声明GLKQuaternion的C ++和Objective-C使用,因为它们都是超集C。

答案 1 :(得分:1)

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

有很多现有的包使用四元数来表示三维空间中的方向。特根是一个。还有很多其他的。不要重新发明轮子。您需要注意一些问题,特别是在使用第三方软件包时。见View Matrix from Quaternion。如果你向下滚动并查看其他一些答案,你会发现其他人提到的两个软件包都是我在答案中谈到的问题。

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