App machen wo ein Pfeil immer nach unten zeigt

  • 4 Antworten
  • Letztes Antwortdatum
M

MacMarde82

Neues Mitglied
0
Welchen Sensor muss ich verwenden um einen Pfeil anzuzeigen der immer nach unten zum Erdmittelpunkt zeigt?
Meine App ist immer im Landscape Modus. Ich habe es mit dem Orientation Sensor versucht, aber der funktioniert nur wenn ich mein Handy im Portrait Modus halte. Je mehr ich mein Gerät zum Landscape Modus drehe desto mehr werden die Sensorwerte unstabil und die Sensorwerte der Y-Axe zeigen nicht mehr senkrecht nach unten.
Um es genauer zu sagen: Wenn ich mein Gerät im Portrait Modus halte kann ich die y-Axe (roll) verwenden um den Winkel zu ermitteln mit dem ich per Canvas.rotate() den Pfeil drehe, aber je weiter ich mein Android Gerät seitlich zum Landscape Modus drehe desto unbrauchbarer werden die Werte.

Muss ich vielleicht einen anderen Sensor verwenden oder ist es mit Trigonmetrie zu berechnen?
 
Berücksichtigst du, dass der Erdmittelpunkt nicht unbedingt in der selben Ebene wie das Handy-Display liegt? Mit anderen Worten, es gibt auch noch die Z Komponente, die man in die Richtung mit einbeziehen muss. Im Landscape Modus hält man das Gerät oft nicht so senkrecht wie im Portrait Modus.

Und du kannst dir leicht überlegen, dass der Pfeil wackeliger werden muss, je größer der Anteil ist, der auf die Z-Achse kommt. Da kann dann ein Tiefpass-Filter etwas Linderung verschaffen (Beispiel dazu gibts in der Android Doku beim Accelerometer)
 
Zuletzt bearbeitet:
Danke für Deine Antwort.

Mir geht es ja nur um die Richtung und nicht um den Betrag der Richtung. Klar wenn das Handy ganz flach auf dem Tisch liegt, dann zappelt der Pfeil wild in alle Richtungen, aber für alle anderen Positionen sollte es doch möglich sein einen Pfeil zu zeichen der zum Erdmittelpunkt zeigt. Wie eine Murmel die man auf das Display legt und die immer zum Boden rollt. Ist aber anscheinend nicht möglich wenn man die Orientierung ändert. Dafür gibt es ja die Funktion RemapCoordinateSystem. Das ist aber nur ein Workaround.

Ich habe etwas gegoogelt und bin dabei auf das hier gestoßen:
geometry - What's the best 3D angular co-ordinate system for working with smartphone apps - Mathematics Stack Exchange

Ich vermute es handelt sich hierbei um ein komplexes mathematisches Problem.
 
Zuletzt bearbeitet:
MacMarde82 schrieb:
Mir geht es ja nur um die Richtung und nicht um den Betrag der Richtung.

Naja, Sensoren liefern halt nur Beträge - aus denen dann erst "Richtung" berechnet wird. Ich hab mal selber mit den Accel-Sensoren rumgespielt (das sind noch die, die am nächsten an der HW dran sind) -nicht nur bei Androiden- und das Ergebnis war auch eher mau. Der Tiefpass-Filter hat das ganze dann wenigstens halbwegs brauchbar gemacht.

Aus Sensoren gute Daten zu gewinnen, ist schwerer, als man gemeinhin denkt.
 
Vielen Dank für Deine Hilfe.

Ich habe jetzt die Lösung gefunden.

Die Lösung war tatsächlich die Funktion remapCoordinateSystem.

Folgender Satz war tatsächlich entscheidend und ist hier zu finden.

"Using the camera (Y axis along the camera's axis) for an augmented reality application where the rotation angles are needed:
remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);"

Auf diese Weise befindet sich der "Totpunkt" auch "Gimbbal Lock" genannt dann so das er mich nicht stört.

Danke für Deine Unterstützung!

Übrigens habe ich zuerst versucht den deprecated Type_Orientation Sensor zusammen mit der GetOrientation Funktion zu benutzen. Dabei springt das Ergebnis zusätzlich willkürlich von z.B. 13° auf 130°. Nachdem ich den alten Type_Orientation Sensor entfernt habe zusammen mit den Listenern ging es einwandfrei.

Für Deine Mühe würde ich auch gerne den Danke Button drücken aber ich sehe keinen.
 
Zuletzt bearbeitet:

Ähnliche Themen

G
Antworten
0
Aufrufe
132
Gerdchen07
G
G
Antworten
1
Aufrufe
384
Gerdchen07
G
G
Antworten
13
Aufrufe
596
Gerdchen07
G
L
Antworten
2
Aufrufe
554
Lexub
L
migi01
Antworten
26
Aufrufe
1.990
migi01
migi01
Zurück
Oben Unten