有兩種獲取3個旋轉值(方位角,俯仰角,滾轉角)的方法。傳感器之間的不同值TYPE_ACCELEROMETER/TYPE_MAGNETIC_FIELD和TYPE_ORIENTATION
一種是註冊TYPE_ORIENTATION類型的偵聽器。這是最簡單的方法,我也得到一個正確的範圍內從每一個旋轉值作爲文檔說: 方位角:0,359] 間距:[-180,180] 卷:[-90,90]
另一個,第一次看到它時最明確和最複雜的瞭解。 Android推薦它,所以我想使用它,但我得到不同的值。
方位角:[-180,180]。 -180/180是S,0 i N,90 E和-90 W.
pitch:[-90,90]。 90是90,-90是-90,0是0但是-180/180(與屏幕向下)是0.
roll:[-180,180]。
我應該得到相同的值,但有小數,對不對?
我有以下代碼:
aValues = new float[3];
mValues = new float[3];
sensorListener = new SensorEventListener(){
public void onSensorChanged (SensorEvent event){
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
aValues = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mValues = event.values.clone();
break;
}
float[] R = new float[16];
float[] orientationValues = new float[3];
SensorManager.getRotationMatrix (R, null, aValues, mValues);
SensorManager.getOrientation (R, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
azimuthText.setText ("azimuth: " + orientationValues[0]);
pitchText.setText ("pitch: " + orientationValues[1]);
rollText.setText ("roll: " + orientationValues[2]);
}
public void onAccuracyChanged (Sensor sensor, int accuracy){}
};
請幫助。這非常令人沮喪。
我是否必須對待這些值或者我做錯了什麼?
謝謝。
我一直在爲此工作約2周。你的代碼看起來應該是這樣的(根據我已經能夠找到的文檔),但是正如你注意到它與TYPE_ORIENTATION傳感器結果不匹配。檢查orientationValues [0]爲負值並添加它似乎是一件簡單的事情。但這並不完全。您不顯示傳感器更新的頻率。我發現即使TYPE_ORIENTATION結果看起來相當穩定,更快的更新也會產生更好的結果。如果你想一起工作,請聯繫[email protected] – 2010-11-14 00:41:10
所有傳感器的速度都是GAME,但我認爲問題與速度無關。這很奇怪,因爲所有博客和論壇(以及我正在閱讀的這本書!)都以相同的方式實施傳感器。 – 2010-11-14 08:21:19
好吧,大家都說如何使用加速度計和磁場,但沒有人說TYPE_ORIENTATION的返回值是不同的,甚至是官方文檔。幹得好的人。等待一個答案... – 2010-11-14 19:42:25