Ermitteln einer "Bewegungsrichtung" (Winkel) eines Punktes

8

Ich arbeite an einem ziemlich coolen Projekt, bei dem ich Daten über die Bewegung eines Cursors sammle, aber ich bin auf ein Problem gestoßen, bei dem ich glaube, ich könnte etwas Hilfe gebrauchen. Ich lese ständig Daten über die x- und y-Position des Cursors (zusammen mit anderen relevanten Daten), und sobald der Cursor eine bestimmte Schwelle in der y-Dimension überschreitet, muss ich die Bewegungsrichtung (Winkel) berechnen. Lassen Sie mich das mit einer Figur illustrieren, die ich gezeichnet habe:

Was dazu tendiert, ist, dass der Cursor sich in einer etwas geraden Linie bewegt, sich dann aber zum Ende der Bewegung hin krümmt. Ich muss Theta berechnen, d. H. Den Winkel des blauen Vektors in Bezug auf die positive x-Achse. Die Idee, die ich mir ausgedacht habe, ist, die letzten 2 Samples zu verwenden, um weitgehend zu bestimmen, was die Bewegungsrichtung ist, sonst würde ich, wenn ich zu viele Samples verwende, den tatsächlichen Winkel verfälschen. Um einen extremen Fall zu geben, lassen Sie mich ein anderes Bild folgen:

Hier repräsentiert jeder Punkt ein Sample. Beachten Sie, dass wenn ich BEIDE Punkte verwende, der richtige Winkel falsch ist (ich muss wieder die Richtung finden, in der sich der Cursor zuletzt bewegt hat, also der Vektor, der am Ende der Linie gezeichnet wird). Ich erwarte nicht, dass dieser Fall viel kommt, aber ich frage mich, ob es einen Weg geben würde, dafür zu lösen, wenn es so wäre.

Beachten Sie schließlich, dass diese Bewegungen entweder im ersten oder im zweiten Quadranten auftreten können, wenn dies einen Unterschied macht.

Ich würde wirklich jede Hilfe hier schätzen. Ich schreibe das in C ++, aber ich denke, ich könnte jede Antwort übersetzen. Danke.

    
John Alberto 31.07.2015, 18:14
quelle

2 Antworten

3

Damit sollten Sie Ссылка

starten
  • Erhalte alle aufgezeichneten Punkte
  • Filtern Sie Punkte aus, die nahe beieinander liegen (ich verwende 5 Pixel)
  • Finde die Winkel jedes aufeinander folgenden Punktepaars (atan2)
  • Finde die absoluten Unterschiede zwischen jedem aufeinander folgenden Winkelpaar
    • Werfen Sie alle Winkel vor der maximalen Differenz weg
  • Durchschnitt der verbleibenden Winkel (Durchschnitt aller Punktvektoren dann atan2 zurück in einen Winkel)

Code

%Vor%     
Louis Ricci 31.07.2015, 19:57
quelle
0

Wie ich sehen kann, wäre die "Bewegungsrichtung" (Winkel) eines Punktes der Winkelkoeffizient von zwei Punkten , ein Punkt am Ende des Vektors und der andere am Anfang.

Weil wir den Winkel nur mit zwei Punkten finden können, können wir eine Linie bilden, da der Richtungsvektor (B-A) wäre, wobei A und B die Punkte sind, von denen ich dir bereits erzählt habe.

Wir können dies anhand der Formel des Winkelkoeffizienten einer Linie berechnen:

m = Tanθ = Δy / Δx

Und das ist einfach:

Tanθ = (yB - yA) / (xB - xA)

Dabei ist θ die "Bewegungsrichtung" (Winkel) und (x, y) sind die Koordinaten der Punkte A und B .

Wenn Sie über den Quadranten sprechen, müssen Sie nur den trigonometrischen Kreis verwenden, um den Wert des Werts von Tan θ zu kennen. Schauen Sie sich also dieses Bild an:

Und natürlich, nachdem Sie den Wert von Tan θ gefunden haben, müssen Sie ihn verwenden, um arctan θ zu finden, und das wird Ihre endgültige Antwort sein.

    
Gabriel Mello 31.07.2015 20:50
quelle

Tags und Links