我需要實現來自CMAttitude iOS類的multiplyByInverseOfAttitude使用的相同行爲。請注意,我不能直接使用它,但我有正確的CMAttitude對象。任何人都可以指引我走向正確的方向?multiplyByInverseOfAttitude(CMAttitude Class)是如何實現的?
1
A
回答
2
由於您不允許自己創建CMAttitude的實例,唯一的方法是創建一個新的四元數並將其作爲任何進一步的計算。我建議使用您自己的定製四元數類而不是簡單的結構CMQuaternion。一個好的起點是cocoamath項目,您可以從trunk獲取Quaternion.m,Quaternion.h和QuaternionOperations.m,我將使用它作爲示例代碼。
首先,你必須拯救你的參考四元數的(從CMAttitude.quaternion
採取)的實例即可使用所有後續的乘法,即
MyClass.h
Quaternion* inverseReferenceQuaternion;
MyClass.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];
在您的計時器循環(或處理程序塊)中,您需要一個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 rotation或Quaternion Powers。
相關問題
- 1. ObjectiveC如何實現class_createInstance(Class cls,size_t extraBytes)?
- 2. 如何在Xamarin.iOS中實現+(Class)layerClass?
- 3. CMDeviceMotion與multiplyByInverseOfAttitude的問題
- 4. Class如何可以是Class類並且沒有Class實例方法?
- 5. removeEventListener是如何實現的?
- 6. MarshalByRefObject是如何實現的?
- 7. UITableViewCellSelectionStyleGray是如何實現的?
- 8. Spree.config是如何實現的?
- 9. pthread_join是如何實現的?
- 10. 「const」是如何實現的?
- 11. java.util.priorityqueue是如何實現的?
- 12. HttpSession是如何實現的?
- 13. nth_element是如何實現的?
- 14. pandas.json.dumps是如何實現的?
- 15. @private是如何實現的?
- 16. cudaMemset是如何實現的?
- 17. 如何實現矢量<class>模板的功能?
- 18. 爲什麼Class是Class的一個實例,而不是Object的實例?
- 19. Xcode CMAttitude間距方向
- 20. 如何實現@property(class,readonly,copy,nonatomic)NSArray <NSString *> * _Nullable readableTypeIdentifiersForItemProvider;
- 21. 如何按Python教程要求實現'class card'
- 22. Websphere 8.5:Class org.apache.commons.logging.impl.Jdk14Logger沒有實現日誌
- 23. 「Class」類對象鎖定實現同步
- 24. 用class :: factory()實現operator <<;
- 25. Kotlin - 繼承Java Class,實現Parcelable
- 26. Python的difflib.find_longest_match是如何實現的?
- 27. Settings.app中的表是如何實現的?
- 28. python的fractions.limit_denominator是如何實現的?
- 29. assign @ property的setter是如何實現的?
- 30. 的dynamic_cast是如何實現的