0

Android ゲームに適用する Sensor.TYPE_LINEAR_ACCELERATION に基づいて、新しい X 位置を計算しようとしています。

次の変数をすべて 0 に設定して開始します。

float newX=0;
float lastX0 =0;
float lastX1 =0;

私の時間変数は、最初は次のように設定されています。

float newTime = System.currentTimeMillis()/1000;
float lastTime0 = lastTime1 = newTime;

次に、私の On SensorChange は次のようになります。

public onSensorChanged(SensorEvent evt){
if (type == Sensor.TYPE_LINEAR_ACCELERATION) {

                    newTime = System.currentTimeMillis()/1000;
                    float oldDeltaTime = lastTime1-lastTime0;
                    float newDeltaTime = newTime- lastTime1;
                   if(oldDeltaTime<1)oldDeltaTime =1;

                    newX = lastX1 + ((lastX1 - lastX0)/oldDeltaTime)*newDeltaTime +(evt.values[0]/2)*(newDeltaTime*newDeltaTime);
                    lastX0 = lastX1;
                    lastX1 = newX;
                    lastTime0 = lastTime1;
                    lastTime1 = newTime;

                    Log.v("SENSOR MAN LINEAR", "new X:"+newX);


                }
}

しかし、ログの newX が常に 0 になっています。

LinearAcceleration を正常に位置に変換した人はいますか? 誰かが私が間違っていることを理解できます..

私は中で泣いています!

4

1 に答える 1

1

私の経験では、測定に関連する誤差により、単独Sensor.TYPE_LINEAR_ACCELERATIONで位置を正確に推定することは不可能です。Sensor.TYPE_LINEAR_ACCELERATION

なぜあなたがいつもゼロになっているのか分かりません。それをデバッグするには、Log.vすべての変数を単純に調べて問題を解決します。

また、式newXがセンサー値を最大限に活用しているかどうかもわかりません。加速は速度の変化であり、あなたの実装はそれに対応していないようです。

最後に、イベント値はデバイスの向きによって異なります。Sensor.TYPE_LINEAR_ACCELERATIONしたがって、成功のチャンスを得るには、コンパスセンサーの読み取り値と組み合わせて、値が現実世界の方向にどのようにマッピングされるかを試して解決する必要があります.

于 2013-05-25T09:14:53.147 に答える