1

我正在从我的设备(为 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寻找。

有问题的角度就像用户正在通过他们的手机看,无论他们如何拿着它,在现实世界中,我想要他们从地平线看的角度..

例如,如果他们正在看地平线,我希望返回 90 度,如果他们直视天空,我应该得到 180,直下 -180 .. 然后我还想要他们正在看的磁北度数..使用磁力计

4

1 回答 1

1

values[2]应该已经包含程度值,在参考文献中提到

values[2]:滚动,绕 Y 轴旋转(-90<=roll<=90),当 z 轴向 x 轴移动时为正值。

更新

看看这张图:http: //developer.android.com/images/axis_device.png

在这里您可以看到蓝色轴 - Y 轴。当你的手机转动它时,它被称为“滚动”。旋转的角度将包含在values[2].

于 2012-07-12T15:11:10.773 回答