2012-02-15 293 views
2

我試圖獲得Android設備的方向,我需要它在四元數結構(基本上是float[4])。如何從Android中的旋轉矩陣中獲得四元數?

我現在有是這樣的:

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); 

在「旋轉」,我有4×4的旋轉矩陣,並且在取向我有一個浮子[3]向量,其中我有方位角,俯仰和滾轉。

我怎樣才能得到四元數?

回答

4

我不會使用歐拉角(滾動,俯仰,偏航),它幾乎是你的應用程序的screws up the stability

至於旋轉矩陣轉換爲四元數,谷歌表示:

+0

Thanx的答案。我認爲這是我需要的。另外,解釋它的谷歌視頻非常清晰。 Thanx再次:) – Alex 2012-02-16 01:36:24

+0

@亞歷克斯很高興聽到它。祝你好運! – Ali 2012-02-16 08:33:06

3

如果你不介意只被提供給API 9級及以上,你可以使用Sensor.TYPE_ROTATION_VECTOR,無論如何都會返回一個單位四元數併爲您節省工作。如果饋送長度爲3的數組,則這些值將是四元數的向量部分,滿足sin(theta/2) * u,其中u是3D單位向量。如果數組長度爲4,則第四個值將爲單位四元數的標量值cos(theta/2)

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