0

センサーに関するすべての情報を取得するアプリをコーディングしていました。回転ベクトル 1 に問題があります。Android の公式 Web サイトで、このセンサーで取得する値が 4 つあることがわかりました。

TYPE_ROTATION_VECTOR :

SensorEvent.values[0] x 軸に沿った回転ベクトル コンポーネント (x * sin(θ/2))。

SensorEvent.values[1] y 軸に沿った回転ベクトル コンポーネント (y * sin(θ/2))。

SensorEvent.values[2] z 軸に沿った回転ベクトル コンポーネント (z * sin(θ/2))。

SensorEvent.values[3] 回転ベクトルのスカラー コンポーネント ((cos(θ/2)).1

これが私のコードです:

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    //Get sensors values
    float x, y, z, s;
    String s1 = "stringX", s2 = "stringY", s3 = "stringZ", s4 = "stringS";

    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {


            x = event.values[0];
            y = event.values[1];
            z = event.values[2];
            s = event.values[3]; // <============== The error indicate this line

            s1 = "" + x;
            s2 = "" + y;           
            s3 = "" + z;
            s4 = "" + s;

            tvx.setText(s1);
            tvy.setText(s2);
            tvz.setText(s3);
            tvs.setText(s4);

    }
}

ログの猫は次のとおりです。

 FATAL EXCEPTION: main
 java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at com.example.sensortnewtest.RotationVectorInfos.onSensorChanged(RotationVectorInfos.java:128)
at android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:204)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

event.values[3] が不可能ということですか?

君たちありがとう。

4

2 に答える 2

1

SensorEvent に関する Android ドキュメントによると、4 番目の値 (つまり event.values[3]) はオプションであり、values.length = 4 の場合にのみ存在します (その Web ページで TYPE_ROTATION_VECTOR を検索してください)。したがって、提供されていない場合に遭遇しているだけです。

于 2013-05-14T12:27:25.997 に答える
0

これは 3D の方法です。x、y、z 軸のみに回転があります。ここでの S の意味は何ですか。これを使用しないでください。お分かりできると良いのですが

于 2013-05-14T12:14:41.427 に答える