如何在Android中从旋转矩阵获取四元数?

3

我正在尝试获取Android设备的方向,需要以四元数结构(float[4])表示。

目前我拥有以下代码:

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
    last_acc = (float[])event.values.clone();
}
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
    last_mag = (float[])event.values.clone();
}
if (last_acc != null && last_mag != null){
    SensorManager.getRotationMatrix(rotation, inclination, last_acc, last_mag);
    SensorManager.getOrientation(rotation, orientation);

在“旋转”中,我有4x4的旋转矩阵,在方向中,我有一个float[3]向量,其中包含方位角、俯仰角和横滚角。
现在我怎样才能得到四元数?
2个回答

6

谢谢回答。我想这就是我需要的。另外,解释清晰的谷歌视频也很有帮助。再次感谢 :) - Alex
@Alex 很高兴听到这个消息。祝你好运! - Ali

4
如果您不介意只能在API Level 9及以上使用,可以使用 Sensor.TYPE_ROTATION_VECTOR,它会返回一个单位四元数并为您省去工作。如果提供了长度为3的数组,则值将是满足 sin(theta / 2) * u 的四元数的向量部分,其中 u 是三维单位向量。如果数组的长度为4,则第四个值将是单位四元数的标量值,cos(theta / 2)

http://developer.android.com/reference/android/hardware/SensorEvent.html#values


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接