Ottieni l'angolo in radianti dato un punto su un cerchio


14

Sto lavorando a un quadrante che ruota attorno a un cerchio.

prima di fare clic

Questo quadrante dovrebbe consentirti di spostarti ovunque in un cerchio per regolare la posizione del quadrante su un punto del cerchio con la stessa angolazione del clic. Ad esempio, dal quadrante sopra se si fa clic sul punto mostrato in rosa sotto, sposterò il quadrante sopra quel punto ma sul cerchio.

dopo il clic (rosa)

So come ottenere la posizione di un punto su un cerchio dato un raggio e un angolo (in radianti). Questa è questa formula :

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

Tuttavia, sto cercando di fare un po 'il contrario: ho un punto di clic, che voglio trasformare in un punto su un cerchio (dove va la manopola di controllo). Sto cercando di usare questo punto (e un dato raggio) per capire l'angolo in radianti per farlo, in modo da poter posizionare la manopola di controllo sul cerchio con lo stesso angolo.

C'è una formula utile che posso usare per ottenere questo risultato?


Stai cercando la formula per ottenere un angolo tra i punti?
William Mariager,

Riesci a ottenere un angolo tra due punti? Posso calcolare la pendenza ma la mia ipotesi era che avevo bisogno di un terzo punto per creare un triangolo e usare una funzione trigonomica inversa per risolverlo.
editore

Ho pubblicato una risposta che mostra come farlo.
William Mariager,

3
Quello che hai davvero qui è l' angolo tra due vettori . Entrambi provengono dal centro del cerchio e hanno la stessa magnitudine (raggio del cerchio).
MichaelHouse

Ecco la matematica che sta dietro: funzioni di innesco inverse . atanè l'abbreviazione di arctan, ed atan2è solo una funzione che accetta singoli argomenti e fa la divisione per te.
voithos,

Risposte:


25

Scopri la funzione atan2 .

Ti dà l'angolo tra (0, 0) e (x, y), x ed yè l'argomento della funzione.

Edit: se il centro del cerchio non è (0, 0), non importa, basta fare questo: atan2(y - cy, x - cx).


Importa se il centro del mio cerchio non è a (0,0)? Immagino di aver semplicemente compensato gli argomenti atan2come mostrato da @Luis di seguito?
editore

Traduci semplicemente sottraendo. Vedi la modifica.
jcora,

3
-1: Il primo parametro per atan2 èy
Luis Estrada

2
Grazie @LuisEstrada, l'ho appena corretto. (Spero che tu faccia un +1. :))
jcora

+ Luis Estrada Mi dispiace non avercela, ma ho dovuto ringraziarti. Ho cercato di eseguire il debug del mio programma per un giorno e mezzo ormai. Si scopre che gli argomenti atan2erano arretrati!
Carcigenicato

8

È necessario il centro della manopola e il punto del cursore insieme alla funzione atan2 . Quindi lo usi in questo modo:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.