AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Analoge Uhr --> Winkel

Ein Thema von TarantelFaser47 · begonnen am 8. Jun 2018 · letzter Beitrag vom 9. Jun 2018
Antwort Antwort
TarantelFaser47

Registriert seit: 30. Jan 2018
13 Beiträge
 
#1

Analoge Uhr --> Winkel

  Alt 8. Jun 2018, 13:27
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:
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;
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)

Es funktioniert übrigens & ich habe noch nicht an dem Ziffernblatt gearbeitet.

Geändert von TarantelFaser47 ( 8. Jun 2018 um 13:31 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
318 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Analoge Uhr --> Winkel

  Alt 8. Jun 2018, 14:06
Das kommt vom Bei Google suchenEinheitskreis. Man berechnet Koordinaten eines Punktes auf einem Kreis mit dem Mittelpunkt ( cx | cy ) und dem Radius r mittels:
( 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 Bei Google suchenBogenmaß, in der Schule wird nur noch Gradmaß gelehrt.
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
TarantelFaser47

Registriert seit: 30. Jan 2018
13 Beiträge
 
#3

AW: Analoge Uhr --> Winkel

  Alt 8. Jun 2018, 14:43
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:https://www.google.com/search?q=einh...U7pQhLyaNLjLM: sehe, wird mir auch alles klar!
Trozdem danke für den Tipp (ich hab noch nie etwas vom Einheitskreis gehört )

Geändert von TarantelFaser47 ( 8. Jun 2018 um 15:11 Uhr)
  Mit Zitat antworten Zitat
TarantelFaser47

Registriert seit: 30. Jan 2018
13 Beiträge
 
#4

AW: Analoge Uhr --> Winkel

  Alt 8. Jun 2018, 15:14
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 )
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.131 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Analoge Uhr --> Winkel

  Alt 9. Jun 2018, 21:23
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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf