Ich muss eine Kompass-App für Android schreiben. Das einzige, was der Benutzer auf dem Bildschirm sieht, ist ein Würfel mit einer roten Wand, die nach Norden zeigen muss. Das ist nicht wichtig. Wichtig ist, dass ich diesen Würfel entsprechend der Drehung des Geräts selbst drehen muss, damit die rote Wand weiterhin nach Norden zeigt, egal wie das Telefon gehalten wird. Mein Code ist einfach und überschaubar:
@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;
}
}
}
Ich habe diese zusätzliche Richtungsvariable hinzugefügt, die einfach speichert, ob das Display des Telefons nach unten oder nach oben gerichtet ist. Ich weiß nicht, ob ich das brauche, aber es scheint einige Fehler zu beheben. Ich verwende die SensorSimulator für Android, aber immer wenn mein Pitch-Slider in den Bereich [-90, 90] geht, geraten die anderen Variablen durcheinander. Es ist, als ob sie einen Versatz von 180 bekommen. Aber ich kann nicht erkennen, wenn ich in diesem Intervall bin, weil der Bereich der Tonhöhe von -90 bis 90 ist, so kann ich den Schieberegler von links nach rechts bewegen und ich werde immer in diesem Intervall sein.
Das war alles nur, um Ihnen zu zeigen, wie weit mein Code fortgeschritten ist. Ich sage nicht, wie das Problem zu lösen ist, weil ich mich damit wahrscheinlich nur in eine Sackgasse manövrieren würde. Sehen Sie, ich versuche jetzt schon seit 3 Tagen, diese Anwendung zu schreiben, und Sie können sich vorstellen, wie sauer mein Chef ist. Ich habe alle möglichen Anleitungen gelesen und jede Formel ausprobiert, die ich finden oder mir ausdenken konnte. Also helfen Sie mir bitte. Alles, was ich tun muss, ist zu wissen, wie ich meinen Würfel drehen kann, dessen Drehwinkel EULER-WINKEL in Grad sind.