Winkel zwischen zwei Punkten, 0-360, CW?
Ich wissen diese Frage wurde schon tausendmal gefragt, bevor, aber für das Leben von mir ich kann nicht finden, die Antwort, die ich brauche. Was ich will ist zu finden, dass der Winkel (0 bis 360 Grad, drehen im Uhrzeigersinn) zwischen 0,1
und ein weiterer Punkt (in der folgenden Grafik 0.3,-0.17
), mit dem Ursprung in 0,0
. Hier ist ein etwas grob gezeichnet (freehand) illustration dessen, was ich brauche:
Den Kreis auf der linken Seite ist rein für die zeigen, in welche Richtung ich will den Winkel zu drehen, und von wo Sie start/Ende. Die Zeichnung auf der rechten Seite zeigt ein Beispiel für die Eingabe würde ich liefern, um den code (d.h., 0.3,-0.17
). Die grüne Linie ist der resultierende Winkel.
Dem Grund Frage ich hier und nicht auf MathExchange ist, dass mein problem direkt eine Programmierung; das ist, meine Frage ist: Wie finde ich den Winkel zwischen zwei Punkten, wie oben beschrieben, in einer Programmiersprache wie C++ oder JavaScript? Darüber hinaus, der Grund, warum ich nicht eine bestimmte Sprache ist, dass viele die ich kenne und in der Lage bin, Umwandlung zwischen allen von Ihnen, die ermuntert mehr Menschen, sich zu post eine potenziell richtige Antwort; dies ist hilfreich, um mir und allen, die nach mir kommen und finden Sie diese Frage stellen.
Es ist wirklich nicht, obwohl. Es ist eine praktische Frage, wie berechne Winkel im code. Definitiv nicht off-topic.
Sie müssen die Winkel (und in was für Einheiten-Grad, Radiant), oder würde der Cosinus in Ordnung sein?
Ich habe keine Ahnung, was ein Kosinus ist. Also ja, ich brauche den Winkel in Grad an, obwohl ich glaube, ich könnte die Konvertierung zwischen Radiant und Grad, wenn nötig.
OK, also, was willst du denn mit dem Winkel? Nur zeigen Sie es?
InformationsquelleAutor Clonkex | 2014-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
atan2
Funktion gibt den Winkel eines Punktes mit Bezug auf die X-Achse, da der Punkt die x-und y-Koordinaten. Das Ergebnis in der Regel reicht zwischen -180 und 180 Grad, aber wir anpassen können, die auf [0, 360] später.Finden Sie den Winkel zwischen zwei Linien, A und B, die sich von der Herkunft, durch Subtraktion Ihre atan Ergebnisse:
Hier, Ihre, Ein Punkt (0,1) und Ihre B-Punkt (0.3, -0.17).
atan2
Regel gibt den Winkel in Bogenmaß und nicht in Grad (überprüfen Sie Ihre Sprache in der Dokumentation, um sicher zu sein). Wenn dies der Fall ist, sollten Sie es zu konvertieren in Grad hier.angle
wird jetzt irgendwo zwischen -360 und 360 Grad, so dass Sie brauchen, um eine zusätzliche Kontrolle, um es in den gewünschten Bereich.So, nur um zu versuchen zu lernen, wie es tatsächlich funktioniert, sagen die Herkunft war nicht wirklich
0,0
- Sie tun würdeangle = atan2(a.y-o.y, a.x-o.x) - atan2(b.y-o.y, b.x-o.x);
, vorausgesetzto
ist der Ursprung. Richtig?Sie müssen das negative des Winkels, da Sie Ihre Skizze im Uhrzeigersinn, während atan2 berechnet den Winkel gegen den Uhrzeigersinn. atan2(x,y) würde direkt geben Sie den Winkel in der setup (im Bogenmaß).
richtig, nur subtrahieren
o
die Art und Weise Sie tun. @LutzL, ich glaubst meine Zeichen richtig sind-ist... Das Beispiel Python-Implementierung angezeigt werden die richtige Antwort geben, mindestens.Ja, Sie sind richtig, denn Sie berechnen
start_angle - end_angle
ist implizit, durch die Zeichen, ausdrücklich es wäre(-end_angle)-(-start_angle)
.InformationsquelleAutor Kevin
Wenn Sie das Bild kippen über die Diagonale, d.h., der Austausch der x-und y-Koordinaten, die Verteilung der Winkel der normalen für die Trigonometrie. So
plus eventuelle Korrekturen für den Bereich, wenn Sie nicht möchten, dass [-180°..180°].
(Beachten Sie, dass
atan2
Argumente sind in der Regel in der Reihenfolge (y, x), aber wir sind hier Tausch.)InformationsquelleAutor LutzL