請參閱下面的代碼,我從Game_Rotation_Vector傳感器事件有4個數字和我想要實現的是讓我的手機的軸旋轉角度。如何轉換遊戲旋轉矢量傳感器結果軸角
例如。如果我將手機屏幕計數器時鐘方向旋轉90度,我想從傳感器數據中獲得90deg的實際值。
任何人都可以提供代碼到4個遊戲旋轉矢量值轉換爲3軸的角度值?
請參閱下面的代碼,我從Game_Rotation_Vector傳感器事件有4個數字和我想要實現的是讓我的手機的軸旋轉角度。如何轉換遊戲旋轉矢量傳感器結果軸角
例如。如果我將手機屏幕計數器時鐘方向旋轉90度,我想從傳感器數據中獲得90deg的實際值。
任何人都可以提供代碼到4個遊戲旋轉矢量值轉換爲3軸的角度值?
的值被放入單位四元數like so:
sensors_event_t.data[0] = rot_axis.x*sin(theta/2);
sensors_event_t.data[1] = rot_axis.y*sin(theta/2);
sensors_event_t.data[2] = rot_axis.z*sin(theta/2);
sensors_event_t.data[3] = cos(theta/2)
所以,反向只是:
double theta = Math.acos(vals[3])*2;
double sinv = Math.sin(theta/2);
double xa = vals[0]/sinv;
double ya = vals[1]/sinv;
double za = vals[2]/sinv;
但是 XA,XY,XZ和不角度它們是文檔中描述的座標軸。我不確定你想要什麼,你最好直接用單位四元數達到你未說明的目標。
使用unit quaternion的原因是爲了避免gimble lock,基本上可以不描述在三個角度,側傾/俯仰/偏轉,例如術語每一個可能的旋轉以一定的俯仰和偏航角可以喪失滾動的能力。
所以要利用這一種方法是轉換成旋轉矩陣:
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
// convert the rotation-vector to a 4x4 matrix. the matrix
// is interpreted by Open GL as the inverse of the
// rotation-vector, which is what we want.
SensorManager.getRotationMatrixFromVector(
mRotationMatrix , event.values);
}
它看起來不錯除了RT的東西,那是什麼呢? – weston
即將半徑轉換爲角度。如果我把手機調到180度,ya只會從-40改爲40.這應該是-90到90.不知道我的代碼有什麼問題。 – mind1n
xa,xy和xz不是角度,它們是軸的座標,請在我的答案中閱讀鏈接。 – weston