Domanda

Sto costruendo un controllo di menu ruota. L'idea è si gira la ruota fino a quando la voce che si desidera agire su è in vista, poi si fa clic su di esso o qualsiasi altra cosa. Sto cercando di capire come tradurre i movimenti del mouse dell'utente (X & Y) nel numero di gradi per far girare la ruota. Posso realizzare tutto, ho solo manca la matematica per eseguire la conversione. Qualsiasi aiuto o puntatori sono apprezzati!

È stato utile?

Soluzione

Angolo tra posizioni del mouse

Se l'utente sposta il mouse da [X1, Y1] a [x2, y2], ciò che si vuole in sostanza è quello di trovare

? = ? 1 -? 2

Dove:

? 1 = Math.atan2 (y1, x1);

? 2 = Math.atan2 (y2, x2);

Ora, tutto questo dipende da dove si definisce la vostra origine (centro della ruota). Se la vostra origine è [x0, y0], poi basta sottrarre questi valori dalle coordinate del mouse vero e proprio.

Inoltre sullo schermo, il sistema di coordinate è a testa in giù, in modo 0,0 è in alto a sinistra invece che in basso a sinistra, quindi avresti bisogno di capovolgere questo, ma la matematica è essenzialmente la stessa.

Si noti inoltre che l'angolo viene misurato in radianti e non gradi.

Altri suggerimenti

Prendere la atan2() di due posizioni successive offset dal centro di controllo e modificare il valore delta degli angoli moltiplicato per una costante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top