Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Uhr Programmieren (https://www.delphipraxis.net/185782-uhr-programmieren.html)

GroZ 6. Jul 2015 12:26

Uhr Programmieren
 
Ich soll eine Uhr programmieren. Ich habe bereits einen Kreis und davon den Mittelpunkt. Zeiger habe ich auch schon einen. Wie muss ich nun fortfahren? Bin mit Delphi nicht so gut. :D

baumina 6. Jul 2015 12:31

AW: Uhr Programmieren
 
Da bietet sich ein Timer an.

Uwe Raabe 6. Jul 2015 12:33

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307791)
Wie muss ich nun fortfahren?

Das hängt davon ab, ob der Zeiger ein Stunden-, Minuten- oder Sekunden-Zeiger ist. Abhängig davon musst du ihn jede Stunde, Minute oder Sekunde um 6° drehen.

Jetzt mal ehrlich: Was erwartest du denn für eine Antwort auf so eine Frage?

GroZ 6. Jul 2015 12:40

AW: Uhr Programmieren
 
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

Klaus01 6. Jul 2015 12:45

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307796)
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

.. mal in die Geometrie Unterlagen schauen..

Grüße
Klaus

GroZ 6. Jul 2015 12:47

AW: Uhr Programmieren
 
Zitat:

Zitat von Klaus01 (Beitrag 1307798)
Zitat:

Zitat von GroZ (Beitrag 1307796)
Stunden und Minuten würden reichen. Ich habe Jetzt einen Kreis mit canvas.ellipse erstellt. dort mit MoveTo LineTo einen Zeiger vom Mittelpunkt aus gezogen. Wie kann ich ihn um 6 grad drehen lassen?

.. mal in die Geometrie Unterlagen schauen..

Grüße
Klaus

Hab das Tafelwerk neben mir es geht ja darum im Programm den Zeiger wie eine uhr ticken zu lassen sprich alle 60s um 6°

MrSpock 6. Jul 2015 12:55

AW: Uhr Programmieren
 
Schau mal unter Polarkoordinaten und karthesische Koordinaten.

Perlsau 6. Jul 2015 13:41

AW: Uhr Programmieren
 
Zitat:

Zitat von GroZ (Beitrag 1307791)
Ich soll eine Uhr programmieren. Ich habe bereits einen Kreis und davon den Mittelpunkt. Zeiger habe ich auch schon einen. Wie muss ich nun fortfahren? Bin mit Delphi nicht so gut. :D

Für einen Anfänger mag das vielleicht schon etwas zu anspruchsvoll sein, denn man muß sich, will man die Aufgabe lösen, ein wenig mit den Canvas-Funktionen auskennen. Zum Beispiel ist es wichtig, den richtigen Zeichen-Modus zu wählen, damit man den jeweiligen Zeiger ohne Verlust des Hintergrundes löschen und neu zeichnen kann. Dann ist auch noch wichtig, wie man die jeweiligen Positionen berechnet, zu denen gezeichnet werden soll. Ausgangspunkt ist ja immer das Zentrum des Kreises. Nun benötigt man noch die X-Y-Koordinate des Zielpunktes auf der Kreisfläche für den Befehl LineTo. Um diesen nicht ständig neu berechnen zu müssen, ist es sinnvoll, die Berechnung beim Programmstart nur einmal durchzuführen und die Koordinaten dann in einem Array[0..59,1..2] of Integer zu speichern. Die Berechnung selbst hast du hoffentlich im Unterricht gelernt, ich müßte sie auch erst nachschlagen, weil mir das nicht geläufig ist.

Popov 6. Jul 2015 15:09

AW: Uhr Programmieren
 
@GroZ

Uhr mit Zeigern programmieren hat etwas mit Sinus, Cosinus und Pi zu tun.

Gegeben sind x1 und y1 als Position für Mitte. Indirekt ist noch der Winkel gegeben. Ein voller Kreis hat 360°, ein halber Tag 12 Stunden. Den Winkel für eine Stunde kann man somit mit einem Dreisatz berechnen, genauso wie den für eine Minute und eine Sekunde. Dann ist noch der Radius gegeben (Länge des Zeigers):

Delphi-Quellcode:
var
  al: Integer = 0;

function LineAnglePoint(Canvas: TCanvas; p: TPoint; r: Integer; Angle: Double): TPoint;
begin
  Result.X := p.X + Round(Cos(Angle * Pi / 180) * r);
  Result.Y := p.Y - Round(Sin(Angle * Pi / 180) * r);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  p1, p2: TPoint;
  r,
  x2, y2: Integer;
begin
  p1 := Point(100, 100);
  r := 100;
  Canvas.FillRect(Canvas.ClipRect);
  p2 := LineAnglePoint(Canvas, p1, r, al);
  Canvas.Polyline([p1, p2]);
  Inc(al);
  if al >= 360 then al := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  Timer1.Interval := 1;
end;

alleinherrscher 6. Jul 2015 15:13

AW: Uhr Programmieren
 
@Popov Ich dachte wir lösen hier keine Schulaufgaben, sondern geben Hilfestellungen :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz