Ich versuche, die Bewegung der Vorrichtung nur in der vertikalen Richtung, d. h. der Aufwärts- und Abwärtsbewegung, zu verfolgen. Dies sollte unabhängig von der Ausrichtung des Geräts sein. Dinge, die ich bereits kenne oder versucht habe, sind diese
Die lineare Beschleunigung wird durch den Sensor TYPE_LINEAR_ACCELERATION angegeben, und die Achsen sind die Telefonachsen, so dass die Verfolgung bestimmter Achsen keinen Unterschied macht.
Ich habe versucht, die Transponierung oder Umkehrung des Rotationsvektors (invers oder transponiert für den Rotationsvektor sind gleich) anzuwenden und dann versucht, die z-Richtung des linearen Beschleunigungsvektors zu verfolgen. Scheint nicht zu helfen.
Ich versuche ein Punktprodukt mit Gravitationswerten (TYPE_GRAVITY) zu erstellen, um die Richtung der Beschleunigung zu erhalten, aber es scheint fehleranfällig zu sein. Selbst wenn ich mein Gerät schnell hochfahre, sagt es, dass es nach unten geht.
Ich werde diese Methode hier skizzieren
%Vor%Was ist der Fehler bei der Methode? Bitte helfen Sie mir, ich bin seit einiger Zeit darauf festgefahren.
Wie ich sehe, versuchen Sie in der dritten Methode, den cos des Winkels zwischen zwei Vektoren zu finden (Gravitationsvektor und Beschleunigungsvektor). Und die Idee ist, wenn der Winkel nahe bei 180 Grad ist, hast du eine Aufwärtsbewegung, wenn der Winkel nahe bei 0 Grad ist, hast du eine Abwärtsbewegung. Kosinus ist eine Funktion, die einen positiven Wert hat, wenn der Winkel zwischen -90 und 90 Grad liegt. Wenn Ihr cosineVal
-Wert positiv ist, bedeutet das, dass das Telefon nach unten geht und selbst wenn cosineVal näher an 1 Bewegung ist. So ist es umgekehrt. Wenn der Kosinus negativ ist (von 90 ° bis 270 °), haben Sie Bewegung.
Wahrscheinlich können Sie Vektoren von Sensor.TYPE_ACCELEROMETER
von Ссылка erhalten, wo Sie Schwerkraft haben Vektor und Beschleunigungsvektor.
Ich habe unten einen Codeausschnitt erstellt, den du ausprobieren kannst.
Tags und Links android vector android-sensors motion-detection