2012-07-12 77 views
0

我從我的設備(針對android編程)獲取各種傳感器讀數,並且我希望將卷(它似乎是數字1-100)轉換爲角度度數並轉換磁航向爲度..我如何將傳感器數據轉換爲度數

任何簡單的公式,將不勝感激。我的幾何形狀是一個稍縱即逝的記憶..

public void onSensorChanged(SensorEvent evt) { 
      int type=evt.sensor.getType(); 
      if(type == Sensor.TYPE_ORIENTATION){ 
       azimuth = evt.values[0]; // azimuth rotation around the z-axis 
       pitch = evt.values[1]; // pitch rotation around the x-axis 
       roll = evt.values[2]; // roll rotation around the y-axis 
      } 

      //Smoothing the sensor data a bit seems like a good idea. 
      if (type == Sensor.TYPE_MAGNETIC_FIELD) { 
       orientation[0]=(orientation[0]*1+evt.values[0])*0.5f; 
       orientation[1]=(orientation[1]*1+evt.values[1])*0.5f; 
       orientation[2]=(orientation[2]*1+evt.values[2])*0.5f; 
      } else if (type == Sensor.TYPE_ACCELEROMETER) { 
       acceleration[0]=(acceleration[0]*2+evt.values[0])*0.33334f; 
       acceleration[1]=(acceleration[1]*2+evt.values[1])*0.33334f; 
       acceleration[2]=(acceleration[2]*2+evt.values[2])*0.33334f; 
      } 
      if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) { 
       float newMat[]=new float[16]; 
       //Toast toast = Toast.makeText(ctx.getApplicationContext(), "accel", Toast.LENGTH_SHORT); 
       //toast.show(); 
       SensorManager.getRotationMatrix(newMat, null, acceleration, orientation); 
       if(displayOri==0||displayOri==2){ 
        SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_X*-1, SensorManager.AXIS_MINUS_Y*-1,newMat); 
       }else{ 
        SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X,newMat); 
       } 
       matrix=newMat; 
      } 
     } 

我要補充一點,我不知道我只是想卷。 。我的應用程序鎖定在橫向模式,但顯然用戶可以把他們的手機在任何訪問的任何角度..所以我可能需要所有三個以上獲得角im即時通訊ng for。

問題的角度是,如果用戶希望通過自己的手機,不管他們是如何保持它在現實世界中,我想他們正在尋找離開地平線的角度..

例如如果他們看着我想要90度迴歸的地平線,如果他們直視天空,我應該得到180,直線-180 ..然後,我也想要從他們正在尋找的磁北極度..使用磁力

+1

你看過這裏的例子:http://developer.android.com/reference/android/hardware/SensorEvent.html – Falcon165o 2012-07-12 14:59:03

回答

1

values[2]應媒體鏈接包含度值,即在reference提及真實:

值[2]:滾動,圍繞Y軸旋轉(-90 < = roll < = 90),當z軸向x軸移動時爲正值 值。

更新

這張圖片請看:http://developer.android.com/images/axis_device.png

這裏你可以看到藍軸 - Y軸。當你的手機轉身時,它被稱爲「滾動」。旋轉的角度將包含在values[2]中。

+0

以及滾動我使用的方向傳感器,獲得0和100之間的值本質上,我嘗試使用Math.toDegrees(),但得到的數字高達5500左右不能正確..你有什麼「百分比」是自然捲? – erik 2012-07-12 15:16:18

+0

'Math.toDegrees(double angrad)'將弧度轉換爲度,而不是從「1-100」轉換爲度:)我正在等待更多細節。 – 2012-07-12 15:19:28

+0

是啊,我讀的文件..說實話我不明白它.. – erik 2012-07-12 15:29:36