Android 如何将传感器数据转换为度数

Android 如何将传感器数据转换为度数,android,geometry,android-sensors,Android,Geometry,Android Sensors,我正在从我的设备(android编程)上获取各种传感器读数,我希望将滚动(似乎是1-100)转换为角度(以度为单位),并将磁强计的航向转换为度 任何简单的方程式都将不胜感激。。我的几何是一段短暂的记忆 public void onSensorChanged(SensorEvent evt) { int type=evt.sensor.getType(); if(type == Sensor.TYPE_ORIENTATION){

我正在从我的设备(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;
            }
        }
我应该补充一点,我不确定我只想要一卷。。我的应用程序锁定在横向模式,但显然用户可以在任何访问时将手机转到任何角度。。所以我可能需要以上三个来获得我想要的角度

所讨论的角度就好像用户在看他们的手机,不管他们如何拿着它,在现实世界中,我想要他们看地平线以外的角度


例如,如果他们看着地平线,我想返回90度,如果他们直视天空,我应该得到180度,直视-180度。。然后我还需要他们看到的磁北的度数。。使用磁强计时,

值[2]
应包含度值,如a中所述:


值[2]:滚动,绕Y轴旋转(-90)你看过这里的例子了吗:对于滚动,我使用的是方向传感器,得到的值介于0和100之间。基本上,我尝试使用Math.toDegrees()但是得到的数字高达5500左右,这是不正确的。你有“百分比”吗这是自然滚动吗?我正在编辑我的帖子,以包含我用来获取滚动等的代码。'Math.toDegrees(双angrad)'从弧度转换为度,而不是从“1-100”转换为度:),我在等待更多细节。'values[2]:滚动,绕Y轴旋转(-90Dude,我不明白你需要什么:)你说的是什么数字?首先你写了一些“1-100”值,现在你想在“-10..10中得到一些东西“射程。。。请查看更新。我的应用程序设置为lanscape,我需要y轴的角度(以度为单位),但用户也可以在纵向模式下握住手机,在这种情况下,我需要y轴的角度。它没有给我学位,而是给了我int.roll=evt.values[2];给我整数