人がこのコンパスを使用していて、90度から時計回りまたは反時計回りに回転を開始したとします。彼らが完了した完全な360度回転の回数をカウントする最良の方法は何ですか?時計回りにのみ回転するか、反時計回りに回転すると仮定します。コンパス - 完全な360度回転のトラック番号
最初のベアリングが90度の場合、センサデータが変更されたときに次のベアリングをチェックし続け、一貫して一方向に動いていれば、回転していることが分かります。そして、その方向に回転し続けて90度に戻すと、それは1回転としてカウントされます。私のやり方は非常に畳み込まれていて非効率的で、私はより良い方法を思いつくのに苦労しています。
このシナリオでは、複数のフルローテーションが予想されます。
ご協力いただきありがとうございます。ありがとうございました!
私はthisという回答を見つけました。そのためのコードサンプルをまとめようとしています。誰かがすでに何か似たようなことをしているなら、投稿してください!
@Override
public void onSensorChanged(SensorEvent event)
{
switch(event.sensor.getType())
{
case Sensor.TYPE_GRAVITY:
{
mValuesAccelerometer = lowPass(event.values.clone(), mValuesAccelerometer);
break;
}
case Sensor.TYPE_MAGNETIC_FIELD:
{
mValuesMagneticField = lowPass(event.values.clone(), mValuesMagneticField);
break;
}
}
boolean success = SensorManager.getRotationMatrix(
mMatrixR,
mMatrixI,
mValuesAccelerometer,
mValuesMagneticField);
if (success)
{
SensorManager.getOrientation(mMatrixR, mMatrixValues);
float azimuth = toDegrees(mMatrixValues[0]);
float pitch = toDegrees(mMatrixValues[1]);
float roll = toDegrees(mMatrixValues[2]);
if (azimuth < 0.0d)
{
//The bearing in degrees
azimuth += 360.0d;
}
}
}