我使用Android重力和磁場傳感器通過SensorManager.getRotationMatrix和SensorManager.getOrientation來計算方向。這給了我方位角,音高和方位號碼。當設備平放在桌子上時,結果看起來很明智。當我的Android設備不平坦時,我應該如何計算方位角,俯仰角,方向?
不過,我有縱向和橫向之間切換禁用清單中,讓getWindowManager()。getDefaultDisplay()。getRotation()始終爲零。當我將設備旋轉90度以使其垂直時,我遇到了麻煩。有時候這些數字看起來相當不對,我意識到這與Gimbal lock有關。但是,其他應用程序似乎沒有這個問題。例如,我將我的應用與兩個免費的傳感器測試應用(Sensor Tester (Dicotomica)和Sensor Monitoring (R's Software))進行了比較。我的應用在設備平坦時與這些應用一致,但是當我將設備旋轉到垂直位置時,可能會有顯着差異。這兩個應用似乎彼此都認同,那麼他們如何解決這個問題呢?
不幸的是,這對我從'SensorManager.getRotationMatrixFromVector'獲得的旋轉矩陣(使用傳感器'TYPE_ROTATION_VECTOR')不起作用。當我計算'double a = Math.toDegrees(Math.atan((r [1] - r [3])/(r [0] + r [4])));'(其中r是旋轉矩陣)我總是以-90 <='a' <= 90的角度結束 – Zardoz 2016-07-19 11:01:12