Meien Uhr tickt nicht ganz richtig:) Wieso eigetnlich nicht???
-
Hi peoples,
Ich habe vor kurzen mal ne kleine analoge Uhr gecodet aber irgendwie scheint diese nicht ganz richtig zu ticken-.- Ich habe das gefühl das es irgendwie an der winkel berechnung liegt wo die punkte gesetzt werden sollen, aber keine ahnung was falsch ist.Ich habe das ganze project mal hier geuploaded mit sourcecode ect. waer net wenn ihr euch das mal anschaun könnt und mir sagt was da net stimmt, DANKE!
Gruß Tobi.
-
Dein Umrechnungsfaktor von 0.1045 ist etwas zu klein. Mit 0.10472 solltest du bessere Ergebnisse erzielen.
Und deine TWOPI-Konstante scheitert - wenn du sie denn benutzen würdest - trotz ihrer wahnwitzigen Genauigkeit daran, dass du als Dezimaltrennzeichen ein Komma benutzt hast.
-
oh mein fehler, hab die konstante nur ausm winrechner kopiert und des vergessen zu aendern

aber 0.10472f hat immer noch net das problem gelöst, das die uhr richtig tickt -.-
Weitere vorschläge?
-
T0bi schrieb:
aber 0.10472f hat immer noch net das problem gelöst, das die uhr richtig tickt -.-
Hättest du eine bessere Fehlerbeschreibung als "tickt nicht richtig" abgeliefert, müssten die Helfer hier nicht herumraten!
Du musst die X-Koordinate aus dem Sinus und die Y-Koordinate aus dem negativen Kosinus errechnen.
Der Faktor 0.1045 für die Stunden ist auch Quatsch. Der große Zeiger geht doch nicht alle 60 Stunden einmal rum.
Außerdem wäre es wohl gut, die Minuten mit in den Stundenzeiger einzubeziehen. Ich habe noch keine Uhr gesehen, bei der der Stundenzeiger "springt".
-
noch nie ne uhr auf nen bahnhof gesehen ^^
also einfach nen minus vors sinus
ode was?Gruß Tobi.
-
oO jetzt tivkt sie anders rum ^^
-
T0bi schrieb:
noch nie ne uhr auf nen bahnhof gesehen ^^
Da springt vielleicht der Minutenzeiger. Aber der Stundenzeiger doch nicht!
T0bi schrieb:
also einfach nen minus vors sinus
ode was?Nein. Lies doch mal, was ich geschrieben habe.
-
boor mein gott!
das is simple Mathematik und nicht winapi!!!
SYSTEMTIME stTimer; GetLocalTime(&stTimer); nSecondAngle = stTimer.wSecond*6; nMinuteAngle = stTimer.wMinute*6; nHourAngle = (stTimer.wHour%12)*30 + stTimer.wMinute/2; // Draw hour pointer SelectObject(hDC, hHourPen); MoveToEx(hDC, pCenter.x, pCenter.y, NULL); LineTo(hDC, pCenter.x + (sin((float)nHourAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.55), pCenter.y - (cos((float)nHourAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.55)); SelectObject(hDC, hHourPen); // Draw minute pointer SelectObject(hDC, hMinutePen); MoveToEx(hDC, pCenter.x, pCenter.y, NULL); LineTo(hDC, pCenter.x + (sin((float)nMinuteAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.65), pCenter.y - (cos((float)nMinuteAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.65)); SelectObject(hDC, hMinutePen); // Draw second pointer SelectObject(hDC, hSecondPen); MoveToEx(hDC, pCenter.x, pCenter.y, NULL); LineTo(hDC, pCenter.x + (sin((float)nSecondAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.90), pCenter.y - (cos((float)nSecondAngle*(float)M_PI/(float)180)*(float)nRadius*(float)0.90)); SelectObject(hDC, hSecondPen);
-
nSecondAngle = stTimer.wSecond6;
nMinuteAngle = stTimer.wMinute6;
nHourAngle = (stTimer.wHour%12)*30 + stTimer.wMinute/2;wozu das mal6 und die umrechnung bei der stunde, wo is der sinn?
Gruß Tobi.
-
Tobi @Sqool schrieb:
wozu das mal6
Um von 60 (Sekunden/Minuten für einen Umlauf des jeweiligen Zeigers) auf 360 zu kommen.
Tobi @Sqool schrieb:
und die umrechnung bei der stunde, wo is der sinn?
Um von 12 (Stunden für einen Umlauf des großen Zeigers) auf 360 zu kommen. Zusätzlich bewegt sich der große Zeiger im Laufe einer Stunde um 30° weiter, also kann man einfach den Minutenwert durch 2 teilen und draufschlagen, um eine gleichmäßigere Bewegung zu erhalten.
-
wozu das mal6 und die umrechnung bei der stunde, wo is der sinn?
Weil eine Minute nunmal 60 Sekunden hat aber ein Kreis meistens
360°...