Winkel im Bogenmaß mit einem Punkt auf einem Kreis berechnen

14

Ich arbeite an einem Zifferblatt, das sich um einen Kreis dreht.

vor dem Klicken

Mit dieser Wählscheibe können Sie mit der Maus irgendwo in einem Kreis fahren, um die Position der Wählscheibe an einen Punkt auf dem Kreis anzupassen, der den gleichen Winkel wie der Klick aufweist. Wenn Sie zum Beispiel auf dem Zifferblatt oben auf die in Pink dargestellte Stelle klicken, würde ich das Zifferblatt über diesen Punkt aber auf den Kreis bewegen.

nach Klick (pink)

Ich weiß, wie man die Position eines Punktes auf einem Kreis mit einem gegebenen Radius und einem Winkel (im Bogenmaß) erhält. Das ist diese Formel :

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

Ich versuche jedoch, etwas vom Gegenteil zu tun - ich habe einen Klickpunkt, den ich in einen Punkt auf einem Kreis verwandeln möchte (wo der Steuerknopf hingeht). Ich versuche, diesen Punkt (und einen bestimmten Radius) zu verwenden, um den Winkel im Bogenmaß zu ermitteln, damit ich den Steuerknopf im gleichen Winkel auf den Kreis setzen kann.

Gibt es eine handliche Formel, mit der ich dies erreichen kann?

Editor
quelle
Suchen Sie nach der Formel, um einen Winkel zwischen Punkten zu erhalten?
William Mariager
Kannst du einen Winkel zwischen zwei Punkten bekommen? Ich kann die Steigung berechnen, aber ich schätze, dass ich einen dritten Punkt benötige, um ein Dreieck zu erstellen und eine inverse trigonomische Funktion zu verwenden, um dies zu lösen.
Herausgeber
Ich habe eine Antwort gepostet, die zeigt, wie es geht.
William Mariager
3
Was Sie hier wirklich haben, ist der Winkel zwischen zwei Vektoren . Sie stammen beide aus dem Mittelpunkt des Kreises und haben die gleiche Größe (Radius des Kreises).
MichaelHouse
Hier ist die Mathematik dahinter: inverse Triggerfunktionen . atanist eine Abkürzung für arctanund atan2ist nur eine Funktion, die einzelne Argumente akzeptiert und die Division für Sie durchführt.
Voithos

Antworten:

25

Überprüfen Sie die atan2- Funktion.

Sie gibt den Winkel zwischen (0, 0) und (x, y) an xund yist das Funktionsargument.

Edit: wenn der Mittelpunkt des Kreises ist nicht (0, 0), ganz gleich, nur dies tun: atan2(y - cy, x - cx).

jcora
quelle
Ist es wichtig, wenn sich der Mittelpunkt meines Kreises nicht in befindet (0,0)? Ich nehme an, ich habe nur die Argumente atan2wie von @Luis unten gezeigt ausgeglichen?
Herausgeber
Einfach durch Subtrahieren übersetzen. Siehe die Bearbeitung.
JCORA
3
-1: Der erste Parameter für atan2 isty
Luis Estrada
2
Danke @ LuisEstrada, ich habe es gerade korrigiert. (Hoffentlich
bekommst
+ Luis Estrada Tut mir leid, dass ich das nicht mitbekommen habe, aber ich musste mich bedanken. Ich habe jetzt anderthalb Tage lang versucht, mein Programm zu debuggen. Es stellte sich heraus, dass die Argumente atan2rückständig waren!
Carcigenicate
8

Sie benötigen die Mitte des Knopfes und den Punkt des Cursors zusammen mit der Funktion atan2 . Sie verwenden es dann so:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)
William Mariager
quelle