Androidの中で揺れ事象を検出背後に数学を解釈する方法は?

ベルフェゴール:

私はオンラインの答えの多くを見ると、それらはすべて同様のコピー貼り付けコードを持っていますが、どれが本当に彼らが使用することを数学の説明を持っていません。私はstackoverflowの上で見るの回答と同じですtutorialspoint上のコードへのURLを持っています。しかし、誰かが私には、コードのこの部分を説明することができます。

   private final SensorEventListener mSensorListener = new SensorEventListener() {
  @Override
  public void onSensorChanged(SensorEvent event) {
     float x = event.values[0];
     float y = event.values[1];
     float z = event.values[2];
     mAccelLast = mAccelCurrent;
     mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
     float delta = mAccelCurrent - mAccelLast;
     // What is this doing?
     mAccel = mAccel * 0.9f + delta;
     if (mAccel > 12) {
        Toast.makeText(getApplicationContext(), "Shake event detected", Toast.LENGTH_SHORT).show();
     }
  }

この行はやって何を想定しています

mAccel = mAccel * 0.9f + delta;

0.9fはどこから来たのと、なぜ我々は自分自身を掛けるとデルタを追加していますか?それは私には明らかではありませんので、私の物理学は強力ではありません。

https://www.tutorialspoint.com/how-to-detect-shake-event-in-android-app

lgsp:

私はまた、あなたがリンクされtutorialspointページに、コードを見ていました。私は、アルゴリズムにおける3つのステップを参照してください。

  1. mAccelCurrent 加速度の現在の絶対値として算出されます
  2. delta加速度の現在と前回の絶対値との差として算出されます。これは、一定の加速度値(重力)と揺れ運動amplfy(加速度の変化)を取り除くために行われます。
  3. mAccel算出される指数平滑法delta0.9係数と、一次フィルタ、すなわち、この関数が呼び出されたタイミングに応じて、(それはしばしば呼ばれる場合、それは低い値'S)高い値又は低い値とすることができます。あなたは正しいことを言っている0.1fの乗算ルックスが不足していることが、しかし、あなたが保護のコードを見ればvoid onCreate機能、あなたはそれを見ることができるmAccel時に初期化されます10f言い換えれば、mAccelの10倍の指数平滑ですdelta
  4. 結果は、任意の値として私に見えた、12と比較されます。

あなたが優先する場合は(1.2ではなく12)、比較されますこれにも10倍の値によって減少させるために十分であろう、0.1乗算を使用することができます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=303784&siteId=1