2010-05-26 27 views
16

In this SO question, someone asked for calculating an angle from three points. Ho bisogno di fare la cosa opposta.Come calcolare un punto con un dato centro, angolo e raggio?

Voglio disegnare un orologio e ho delle immagini minuscole. Un art dude ne ha fatti 60, ognuno con un'ombra individuale e accurata. Quindi ci sono 60 immagini distinte con dimensioni 10x10 punti, già correttamente ruotate al centro di quel quadrato.

Quindi ogni 6 gradi deve essere posizionata un'immagine a tick. Avrei solo bisogno di calcolare la coordinata x/y in base a un punto centrale, un raggio e un angolo.

Così ho:

  • un punto centrale
  • un raggio di
  • un angolo

C'è un modo semplice per calcolare l'x/y coordinate con questo? Forse il cacao-touch ha già una funzione o un metodo utile per questo?

risposta

18

diamo un essere l'angolo, (x, y) il punto centrale e r il raggio, allora il punto sarà

(x + r*cos(a), y + r*sin(a)) 
+5

seno e coseno sono invertiti qui –

+0

Controllare la formula di calcolo aggiornata! – byJeevan

1

L'immagine (centro) in deve essere posto nel punto (x, Y), dove (x, y) sono le coordinate del punto centrale, ed r è il raggio

X = x + (r/2)*cos(angle); 
Y = y + (r/2)*sin(angle); 
18

In matematica per calcolare le coordinate cartesiane dal p Coordinate polari:

x = r * cos(A) + x0; 
y = r * sin(A) + y0; 

dove (x0, y0) è il centro del cerchio, r è il raggio e A è l'angolo.

Ma che presuppone la convenzione di coordinate matematiche, vale a dire x aumenta man mano che ci si sposta verso destra, y aumenta man mano che ci si sposta verso l'alto. Questa è l'impostazione predefinita per le visualizzazioni su Mac OS X Cocoa, ma non so se è la stessa su iPhone.

Anche gli angoli iniziano alle 3:00 e vanno in senso antiorario, ovvero 3 o l'orologio è 0 gradi, 12 o orologio è 90 gradi, 9 o orologio è 180 gradi e 6 o orologio è 270 gradi.

Inoltre, le funzioni seno e coseno funzionano in radianti.

+0

Mi sono appena reso conto che la risposta di unbeli applica già la correzione per far partire l'angolo in alto e andare in senso orario nel modo naturale che ci si aspetterebbe da un quadrante. – JeremyP

+0

+1. Non potevo far funzionare la soluzione di unbeli, ma la tua (usando JavaScript) è stata la tua. Ecco uno snippet per tracciare una linea dal centro di una tela HTML5 all'angolo specificato. Nota l'hack per spostarti a partire dalle 3:00: x0 = ctx.canvas.width/2; y0 = ctx.canvas.height/2; ctx.lineTo ( (x0 + r * Math.cos (toRad (angolo-90))), (y0 + r * Math.sin (toRad (angolo-90))) ); – GojiraDeMonstah

Problemi correlati