C++ 在Cocoa中正确实现四元数计算?

C++ 在Cocoa中正确实现四元数计算?,c++,objective-c,class,quaternions,C++,Objective C,Class,Quaternions,在我的程序中,我使用CMMotionManager跟踪设备运动,并使用设备姿态的四元数表示。为了在全球坐标系中定位设备,我需要做一些涉及四元数的基本计算。为此,我想编写一些四元数类,实现所有需要的函数。是否有人知道什么是正确的方法,或者是否知道应该如何做的一般准则。 我从苹果找到了一个样例项目,它有四元数、向量二和向量三类,它们都是用CPP编写的,但是我认为在COCOA中使用它们不是很容易,因为我不能用这些C++类定义Obj-C头文件中的对象属性。还是我错了? 谢谢。您很可能对OpenGL一点也

在我的程序中,我使用CMMotionManager跟踪设备运动,并使用设备姿态的四元数表示。为了在全球坐标系中定位设备,我需要做一些涉及四元数的基本计算。为此,我想编写一些四元数类,实现所有需要的函数。是否有人知道什么是正确的方法,或者是否知道应该如何做的一般准则。 我从苹果找到了一个样例项目,它有四元数、向量二和向量三类,它们都是用CPP编写的,但是我认为在COCOA中使用它们不是很容易,因为我不能用这些C++类定义Obj-C头文件中的对象属性。还是我错了?
谢谢。

您很可能对OpenGL一点也不感兴趣,但作为Apple supplies的GLKit的一部分。它有一个C接口,但应该很容易外推到类中。建议使用它直接过度表达数学,因为它可能会尽可能充分地使用数学向量单位


你可以直接声明GLK4GNIONIN的C++和Objy-C用法,因为两个超集C.

< P>这里你问了几个问题。如何实现四元数类,如何使用它们来表示方向(姿态),如何将C++实现与目标C集成,如何将所有这些集成到COCa中。我会用一个问题来回答最后一个问题:Cocoa真的需要知道你用什么来表达态度吗

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


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

谢谢。GLK四元数似乎真的有我需要的一切。也许我会坚持下去。谢谢你的链接。那真的很有用。但是也许你也有一些关于如何实现不同的数学结构以便于在Cocoa中使用的指南的链接?据我所知,如果我想要一个3d向量的表示,我可以将它实现为一个包含3个组件的结构,但如果我想用它们定义一些数学运算,我不确定通常是如何实现的。