假设设备方向可能不断变化,我试图隔离垂直或水平加速度分量。
在拥有陀螺仪数据和CMAttitude之前,这是不可能的,因为我们只有加速度数据。既然我们通过CMAttitude同时加速了userAcceleration和方向,那么似乎应该可以通过姿态数据调整加速度数据,以便隔离特定的加速度绝对方向。这与使用参考帧略有不同,因为我期望设备方向不断变化。想念臂章等......就我而言,
无论设备方向如何变化,我都希望能够捕获严格垂直或严格水平的加速度值。这个的几何形状有点超出我的意见,我很欣赏一些建议。
答案 0 :(得分:4)
我不熟悉iOS API,但我可以给出数学答案。
如果iOS具有正确的API,则实现应该是微不足道的。如果你有选择偏好四元数而不是矩阵,因为实现运行得更快。让我们知道它是怎么回事。
答案 1 :(得分:1)
我刚刚实施了 marcv81 回答。
-(void)isolateHorizontalMotionFromMotionData:(CMDeviceMotino *)newMotion
{
//Quaternion Conjugation
CMQuaternion quaternion = newMotion.attitude.quaternion;
GLKQuaternion original_quaternion = GLKQuaternionMake(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
GLKQuaternion conjugated_quaternion = GLKQuaternionConjugate(original_quaternion);
//Rotation of Accelerometer vector with quanternion
GLKVector3 acceleromationVector = GLKVector3Make(newMotion.userAcceleration.x, newMotion.userAcceleration.y, newMotion.userAcceleration.z);
GLKVector3 accelerometionVector_toReferenceFrame = GLKQuaternionRotateVector3(conjugated_quaternion, acceleromationVector);
//Horizontal Acceleration
float horizontalAcceleration = sqrtf(powf(accelerometionVector_toReferenceFrame.x,2)+powf(accelerometionVector_toReferenceFrame.y,2));
}