任务是通过加速度计相对于初始位置的数据获取用户位置。我有两个数组:IntegratedValues(用于保存速度)和IntegratedValues2(用于位置),并首先向这些数组添加零初始条件。然后,我接收coremotion数据并将用户加速度矢量两次传递到集成函数中以获得位置:
主要部分如下:
if(self.onButClickedFirstTime) {
self.initialFrame = dmData.attitude
self.onButClickedFirstTime = false
self.currentRotationMatrix = dmData.attitude.rotationMatrix
self.curAttitude = dmData.attitude
}
var calculatedAcceleration = self.multiplyMatrixOnVector(rotMat:
dmData.attitude.rotationMatrix, acceleration: [Double](arrayLiteral: dmData.userAcceleration.x,
dmData.userAcceleration.y,
dmData.userAcceleration.z)
)
for index in 0 ..< 3{
if(calculatedAcceleration[index] > -0.1 && calculatedAcceleration[index] < 0.1) {
calculatedAcceleration[index] = 0.0
}
}
self.calculatedAccelerations.append(calculatedAcceleration)
if(self.calculatedAccelerations.count >= 2) {
//receive velocity in integratedValues array
self.integratedValues.append(self.trapezoid())
//receive position in integratedValues array
self.integratedValues2.append(self.trapezoid2())
}
else {
//receive velocity in integratedValues array
self.integratedValues.append(self.rectangle())
//receive position in integratedValues array
self.integratedValues2.append(self.rectangle2())
}
集成功能
func trapezoid() -> [Double]{
let step = 0.01
var innerArray:[Double] = [Double].init(repeating: 0, count: 3)
for k in 0..<3 {
innerArray[k] = integratedValues[integratedValues.count-1][k] + (step/2.0)*(calculatedAccelerations[calculatedAccelerations.count-2][k] + calculatedAccelerations[calculatedAccelerations.count-1][k])
}
return innerArray
}
func rectangle() -> [Double]{
let step:Double = 0.01
var temporary:[Double] = [Double].init(repeating: 0, count: 3)
for k in 0..<3 {
temporary[k] = integratedValues[integratedValues.count-1][k] + (step*calculatedAccelerations[calculatedAccelerations.count-1][k])
}
return temporary
}
它不起作用。我得到的坐标值(x,y或z)在我第一次移动手机后一直都分别增加或减少。例如,x和y增大,z永久减小:
x:2.45885665392312 y:12.0701960347246 z:-7.70172802770194
x:2.46064406756483 y:12.0903748004539 z:-7.71571460119331
x:2.46241602875171 y:12.1105587446889 z:-7.72968592982189
x:2.46418465445463 y:12.1307452781769 z:-7.74362066535627
x:2.4659587846542 y:12.1509318116648 z:-7.75751655337187
我在做什么错?谢谢。