CLKQuaternion轮换问题

时间:2016-01-05 12:10:24

标签: ios swift quaternions glkit

我试图通过使用由CoreMotion根据设备旋转生成的CLKQuaternions来实现一些向量的旋转。 以下是我的测试更新类的样子:

     var quaternion:GLKQuaternion{
         get{
             guard let quat = manager.deviceMotion?.attitude.quaternion   else {
             return GLKQuaternionMake(0,0,0,0)
         }
         return GLKQuaternionMake(Float(quat.x), Float(quat.y), Float(quat.z), Float(quat.w))
       }
    }

import UIKit
import GLKit
class QuaternionMovedSupportView: UIView {
    var myFrame:CGRect
    var controller:OverlayViewController!
    var vector=GLKVector3Make(200, 200, 200)
    init(frame: CGRect, delegate:OverlayViewController) {
        controller=delegate
        myFrame=frame
        super.init(frame:frame)
        NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector: Selector("refreshForQuaternion:"), userInfo: nil, repeats: true)
     }

    required init?(coder aDecoder: NSCoder) {
        fatalError()
    }

    func refreshForQuaternion(timer:NSTimer){
        let referenceQuaternion=BackgroundLocationUpdate.sharedUpdater().quaternion
        print("quaternion \(referenceQuaternion.x), \(referenceQuaternion.y), \(referenceQuaternion.z), \(referenceQuaternion.w)")
        let  adjustedVector=GLKQuaternionRotateVector3(referenceQuaternion, vector);
        print("move to \(adjustedVector.x), \(adjustedVector.y), \(adjustedVector.z)")
       self.controller.moveSupport(CGPointMake(CGFloat(adjustedVector.y), CGFloat(adjustedVector.z)))
    }

之前的实施是错误的,因为它不断加速矢量,这也是其自主运动的原因。 现在它实际上根据设备的移动而移动,但仍以意想不到的方式移动。 特别是当我改变设备标题顺时针方向时,它似乎通过向左移动而正确地表现,但是如果我做了一个圆形转弯,它会重新出现在同一侧。 相反,当我顺时针旋转设备时,盒子会以正确的尺寸徘徊而不会移动到屏幕之外,直到某一点加速并且也会消失在左侧。 相反,当我改变倾斜度时,它会在顶部两个角落之间绘制一种抛物线,并在屏幕中央选择拾取。 这个video显示了这两种行为。

我如何使用态度四元数可能有什么问题?

可以从here下载测试项目并将其安装在您的设备上进行测试。

0 个答案:

没有答案