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;
            }
        }

ロールしたいだけかどうかわからないことを追加する必要があります..私のアプリはランドスケープモードでロックされますが、明らかに、ユーザーはアクセス時に電話を任意の角度に向けることができます..したがって、角度を取得するには、おそらく上記の3つすべてが必要です.探している。

問題の角度は、ユーザーが携帯電話をどのように持っていても、現実の世界を見ているかのようであり、地平線から外を見ている角度が必要です..

たとえば、彼らが地平線を見ている場合は 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 に答える