Web を検索しても関連する回答が見つからなかったため、加速度計を使用した Android デバイスの軸周りの360 度回転の検出に関する質問を投稿しています。たとえば、ランドスケープ モードでの y 軸の周り: 開始位置で y 値が 0 であるとします (デバイスは地面に対して平らです)。電話機を前方に 90 度回転させた場合、前方y = -10
に 180 度傾けるとy = 0
、 で 270 度、y = +10
で 360 度になりy = 0
ます。では、事前に指定された方向にのみデバイスが完全に回転したことを検出するには、コードはどのようになるでしょうか?
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// assign directions
x = event.values[1];
y = event.values[0];
z = event.values[2];
???
}
}
編集: getRotationMatrix() メソッドを使用して成功しました。
private float[] r = new float[9];
private float[] i = new float[9];
private float[] v = new float[3];
private float[] accValues = new float[3];
private float[] geoValues = new float[3];
private int azimuth, pitch, roll;
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accValues = event.values.clone();
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
geoValues = event.values.clone();
}
boolean success = SensorManager.getRotationMatrix(r, i, accValues,
geoValues);
if (success) {
SensorManager.getOrientation(r, v);
azimuth = v[0] * (180 / Math.PI);
pitch = v[1] * (180 / Math.PI);
roll = v[2] * (180 / Math.PI);
}
}