2009-05-29 6 views

Antwort

18

h die Stunde als sein Let Fließkommazahl (h=2.25 wäre 02:15 usw.) zwischen 0 und 12. (cX,cY) sind die Koordinaten des Zentrums. hLength und mLength sind die Längen der Stunden- und Minutenzeiger.

// Hour hand 
hAngle = 2.0*Pi*h/12.0; // 0..12 mapped to 0..2*Pi 
hX = cX + hLength * sin(hAngle); 
hY = cY - hLength * cos(hAngle); 

// Min hand 
mAngle = 2.0*Pi*h; // 0..1 mapped to 0..2*Pi, etc. 
mX = cX + mLength * sin(mAngle); 
mY = cY - mLength * cos(mAngle); 
3

Wenn (x1, y1) ist ein Punkt auf dem Umfang und (x, y) ist die Zentrum, dann x1 = x + r * cos(angle) und y1 = y + r * sin(angle)

+0

Beachten Sie, dass dies das "mathematische" Standardkoordinatensystem übernimmt, wobei Y nach oben zunimmt. In typischen 2D-Computergrafiken ist das umgekehrt (damit Y mit der Adresse des Pixels wächst). – unwind

+0

Dies gilt nur für einen Kreis mit Zentrum in origo. – ralphtheninja

+0

Fügen Sie einfach die Koordinaten des Zentrums hinzu. – Svante

0

wenn Zentrum in x0, y0 ist, und 0,0 iz am unteren linken Ecke, dann 01.00 ist x0 + r sin (2π/3), y0 + r cos (2 & pgr;/3).

8

Wo der Mittelpunkt des Kreises (X0, Y0) ist, ist der Radius R und der Winkel mit der x-Achse ist Theta:

X1 = (R * cos theta) + X0 

und

Y1 = (R * sin theta) + Y0 
+0

Das sollte nicht so hoch gewählt werden. Er scheint den Wert von Theta nicht zu kennen. Die Antwort von Eric Bainville ist vollständiger. – jmucchiello

+0

@jmucchiello - Nicht sicher, ich verstehe Sie ... wir wurden nach einem Algorithmus gefragt und ich gab die Beschreibung einer Funktion mit formalen Parametern. Zu diesem Zeitpunkt kennt niemand den "Wert" von Theta! Wenn Sie meinen, dass ich keine Skalierungsfaktoren für die Bewegung der Zeiger einer Uhr berechnet habe, und den Winkel im Bogenmaß für jede der Stundensprünge, dann haben Sie absolut recht, was ich nicht getan habe. Ich habe Arbeit, um meinen eigenen Code zu schreiben! – avstrallen

+1

Ja, ich denke, ich habe 2 Fragen in einem gestellt. Ihre Antwort ist perfekt für den ersten Teil. Vielen Dank. – Surya