gpt4 book ai didi

ios - multiplyByInverseOfAttitude (CMAttitude Class ) 是如何实现的?

转载 作者:行者123 更新时间:2023-11-29 11:04:00 24 4
gpt4 key购买 nike

我需要实现与 CMAttitude iOS 类中的 multiplyByInverseOfAttitude 使用的行为相同的行为。请注意,我不能直接使用它,但我有正确的 CMAttitude 对象。谁能指出我正确的方向?

最佳答案

由于不允许您自己创建 CMAttitude 的实例,唯一的方法是创建一个新的四元数并将其用于任何进一步的计算。我建议使用您自己定制的四元数类而不是简单的结构 CMQuaternion .一个好的起点是 cocoamath您可以从 trunk 获取 Quaternion.m、Quaternion.h 和 QuaternionOperations.m 的项目我将在这个示例代码中使用它。

首先你必须从 complex conjugate 中保存一个实例您的引用四元数(取自CMAttitude.quaternion)用于所有后续乘法,即

我的类.h

Quaternion* inverseReferenceQuaternion;

我的类.c

// initialising code run only once after each call to [motionManager startDeviceMotionUpdates];
CMAttitude firstAttitude = [motionManager deviceMotion].attitude;
CMQuaternion q = firstAttitude.quaternion;
inverseReferenceQuaternion = [[Quaternion alloc] initWithRe:q.w i:-q.x j:-q.y k:-q.z];

在您的计时器循环(或处理程序 block )中,您需要一个 quaternion multiplication :

// on every update
CMAttitude attitude = [motionManager deviceMotion].attitude;
CMQuaternion current = attitude.quaternion;
Quaternion currentMultiplied = initAsProductOf:inverseReferenceQuaternion And:current

现在 currentMultiplied 应该包含您要查找的内容。

如果您是这个主题的新手,四元数很漂亮,但是值得阅读一些教程,例如 OpenGL:Tutorials:Using Quaternions to represent rotationQuaternion Powers .

关于ios - multiplyByInverseOfAttitude (CMAttitude Class ) 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com