![]() |
Analoge Uhr --> Winkel
Hallo,
ich als Delphi Anfänger habe mir vorgenommen eine Analoge Uhr grafisch umzusetzen. Eine digitale Uhr war kein grosses Problem, doch an der Analoguhr bin ich dann gescheitert. Ich habe mir dann von irgendeiner Website eine Lösung kopiert, wie ich die X und Y Koordinate vom Ende des Zeigers ermitteln kann, aber verstanden hab ich das noch nicht... :(
Delphi-Quellcode:
Ich hoffe ihr könnt mir eventuell die Sache mit den Winkeln erklären, unser Informatiklehrer meinte nur dies hätte etwas mit rechtwinkligen Dreiecken (ich komme aber irgendwie nicht drauf, wie es in einem Kreis rechtwinklige Dreiecke mit den Zeigern und dem Mittelpunkt geben kann ;( ) zu tun - In dieser Beziehung haben wir SIN, COS und TAN auch schon im Matheunterricht behandelt (ich gehe in die 9. Klasse) :?
procedure TForm1.Timer1Timer(Sender: TObject);
var min,sec,hr,msec : word; m, s, h : String; xm,ym,xa,xb,xc,ya,yb,yc : Integer; a,b,c : real; bitmap : tbitmap; z : Tcanvas; begin //Bitmap erstellen bitmap := tbitmap.Create; bitmap.Height := paintbox1.Height; bitmap.Width := paintbox1.Width; z := bitmap.Canvas; // Paintboxgröße paintbox1.Width := 300; paintbox1.Height := 300; //Digitale Uhr DecodeTime(time,hr,min,sec,msec); if hr < 10 then h := '0' + inttostr(hr) else h := inttostr(hr); if sec < 10 then s := '0' + inttostr(sec) else s := inttostr(sec); if min < 10 then m := '0' + inttostr(min) else m := inttostr(min); panel1.Caption := h+':'+m+':'+s; //Kreis z.Ellipse(0,0,300,300); //Mittelpunkt xm := paintbox1.Width DIV 2; ym := paintbox1.Height DIV 2; //Winkel a := -( 6 * sec)-( 6/1000 * msec); b := -( 6 * min)-( 1/10 * sec )-(1/10000 * msec); c := -(30 * hr )-( 1/2 * min )-(1/120 * sec); // Zeiger //SEC xa := Trunc(sin(a * Pi / 180) *(-150))+150; ya := Trunc(cos(a * Pi / 180) *(-150))+150; //MIN xb := Trunc(sin(b * Pi /180) *(-150))+120; yb := Trunc(cos(b * Pi /180) *(-150))+120; //HR xc := Trunc(sin(c * Pi /180) *(-100))+100; yc := Trunc(cos(c * Pi /180) *(-100))+100; //Zeichnen! z.Pen.Color := clred; z.MoveTo(xm,ym); z.LineTo(xa,ya); z.Pen.Color := clblack; z.Pen.Width := 2; z.MoveTo(xm,ym); z.LineTo(xb,yb); z.Pen.Width := 3; z.MoveTo(xm,ym); z.LineTo(xc,yc); paintbox1.Canvas.Draw(0,0,bitmap); bitmap.free; end; Es funktioniert übrigens & ich habe noch nicht an dem Ziffernblatt gearbeitet. |
AW: Analoge Uhr --> Winkel
Das kommt vom
![]() ( cos(alpha)*r+cx | sin(alpha)*r+cy ) Beim Winkel alpha ist alpha=0 gleichbedeutend mit rechts (3 Uhr). Delphi verwendet für Winkel das [GOOGLE]Bogenmaß[/GOOGLE], in der Schule wird nur noch Gradmaß gelehrt. |
AW: Analoge Uhr --> Winkel
Danke für die schnelle Antwort, ich denke dass ich es jetzt verstanden habe.
Und das Bogenmaß hatten wir tatsächlich in Mathe. Aber wenn ich das hier: ![]() Trozdem danke für den Tipp (ich hab noch nie etwas vom Einheitskreis gehört :-) ) |
AW: Analoge Uhr --> Winkel
Jetzt hab ich es verstanden, ich musste nur DegToRad() einfügen, und habe mich die ganze Zeit gewundert warum das nicht geht ... Wir hatten auch nur Gradmaß und haben nur den Teil des Kreises (Bogen) auserechnet und gelernt in der Schule (ich Idiot :oops:)
|
AW: Analoge Uhr --> Winkel
Hallo, ich finde das ist ein Super Lern-Projekt und die Umsetzung ist auch gut gelungen. Etwas stimmt bei mir mit der Anzeige noch nicht, ich muss mal den Code durchgehen, eine "00" fängt bei Dir nicht linear nach oben an sondern etwas nach rechts versetzt, da die "00" schon fehlerhaft ist, ist es der Rest automatisch auch. Wenn man sich die Uhr allerdings einen Tick nach Links gedreht vorstellt, passt wieder alles :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz