Androidでコンパスアプリを作成する必要があります。ユーザーが画面に表示するのは、北を向く必要のある赤い壁のある立方体だけです。これは重要ではありません。重要なのは、デバイス自体の回転に応じてその立方体を回転させて、電話がどのように保持されていても赤い壁が北を向くようにする必要があることです。私のコードは単純明快です:
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
direction = event.values[2];
break;
case Sensor.TYPE_ORIENTATION:
if (direction < 0) {
angleX = event.values[1];
angleY = -event.values[2];
angleZ = event.values[0];
} else {
angleX = -event.values[1];
angleY = -event.values[2];
angleZ = event.values[0];
}
break;
}
}
}
電話のディスプレイが下向きか上向きかを単純に格納するこの追加の方向変数を追加しました。必要かどうかはわかりませんが、いくつかのバグが修正されているようです。私はAndroid用のSensorSimulatorを使用していますが、ピッチスライダーが[-90、90]間隔になると、他の変数が混同されます。それは彼らが180オフセットを得るようなものです。しかし、ピッチの範囲が-90から90であるため、この間隔にいることを検出できません。そのため、スライダーを左から書き込みに移動でき、常にその間隔になります。
これはすべて、私のコードがどこまで進んだかを示すためだけのものでした。私はおそらく行き止まりに陥るだけなので、この問題をどのように解決すべきかを言っているのではありません。ほら、私はそのアプリを3日間書き込もうとしていて、上司がどれほど腹を立てているか想像できます。私はあらゆる種類のチュートリアルを読み、見つけたり考えたりできるすべての数式を試しました。だから私を助けてください。私がしなければならないのは、立方体を回転させる方法を知っていることだけです。その回転角は、度単位のオイラー角です。