Autor Beitrag
110022
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 287

XP SP2
Delphi 7
BeitragVerfasst: So 02.12.07 00:15 
ich will sone leine uhr programmieren hab auch das ziffernblatt ansatzweise fertig .
ich will mal wissensie ich die zeiger in einer kreisbewegung bewegen lasse.
der schwarze punkt im bild(anhang)soll die drehachse sein.
aber wie bekomme ich diese kreisbegegung????
der zeiger ist auch ein bild.


Der Anhang wird nicht mehr gebraucht...


Zuletzt bearbeitet von 110022 am So 02.12.07 13:51, insgesamt 1-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 02.12.07 00:17 
Hallo,
Schau mal hier:
de.wikipedia.org/wiki/Sinus

mfg
110022 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 287

XP SP2
Delphi 7
BeitragVerfasst: So 02.12.07 00:21 
ich bin inner 9. klasse.
da hab ich noch nix mit sinus am hut.
kannste mir das irgendwie erklären??
außerdem sagt mir dein verweis nix.
TGLDX
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 22



BeitragVerfasst: So 02.12.07 00:55 
Das Bild auf Wikipedia erklärt Sinus und Kosinus ganz gut :)
Hier mal als Anregung eine Simple Uhr (Benötigt einen Timer mit Interval=1000):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var I: Integer = -90;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 i := i+6;
 Canvas.MoveTo(100,100); 
 Canvas.LineTo((round(cos(PI/180*I)*50))+100,//cos(Winkel im Bogenmaß) * Radius der Uhr 
               (round(sin(PI/180*I)*50))+100);//sin(Winkel im Bogenmaß) * Radius der Uhr 
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.12.07 01:09 
110022 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 287

XP SP2
Delphi 7
BeitragVerfasst: So 02.12.07 10:35 
@TGLDX:
das is ja schon ganz nett
aber wie bekomme ich es hin dass der vorige zeiger immerwieder verschwindet?
und wie ändere ich die position ???
und wie stehts mit der länge der zeiger?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 02.12.07 10:46 
da du nur einen roten Hintergrund hast, kannst du einfach den alten Strich mit rot übermalen.

das i:=i+6 verändert den Winkel. Die 6 musst du jetzt so anpassen, dass es zur Zeit passt.

ausblenden Delphi-Quelltext
1:
2:
  IUnterschied:=360/60;  //360 Grad in 60Min, das wäre dann der große Zeiger
  IUnterschied:=360/(24*60)  //360 Grad in einem Tag, das wäre dann der kleine Zeiger


wenn du jetzt dem Timer ein Intervall von 1000 = 1min gibst, müsste es schon laufen. Wenn du den Timer schneller machst, musst du wiederum die 60 anpassen

ausblenden Delphi-Quelltext
1:
2:
 
  TimeDiff:=(Timer.Intervall*1000)/60;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
110022 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 287

XP SP2
Delphi 7
BeitragVerfasst: So 02.12.07 10:53 
bei mir kommen da unmengen fehler
Bei
ausblenden Delphi-Quelltext
1:
2:
  IUnterschied:=360/60;  //360 Grad in 60Min, das wäre dann der große Zeiger
  IUnterschied:=360/(24*60)  //360 Grad in einem Tag, das wäre dann der kleine Zeiger

kommt
ausblenden Delphi-Quelltext
1:
[Fehler] Unit1.pas(34): Undefinierter Bezeichner: 'IUnterschied'					


und bei
ausblenden Delphi-Quelltext
1:
TimeDiff:=(Timer.Intervall*1000)/60;					

kommt

ausblenden Delphi-Quelltext
1:
2:
[Fehler] Unit1.pas(34): Undefinierter Bezeichner: 'Intervall'
[Fehler] Unit1.pas(34): Undefinierter Bezeichner: 'TimeDiff'



wie bekomme ich das weg??
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 02.12.07 11:02 
Am besten, indem du dir das hier mal anschaust: www.christian-stelzm...rtikel/crashkurs.htm

mfg
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 02.12.07 11:02 
ääähm... :roll:

Wieso gibts immer die Leute, die einfach nur Copy&Pasten...man sollte zumindest das soweit verstehen, dass man solche Sachen anpassen kann.

guckst du: IUnterschied entspricht der 6 in i:=i+6. Das musst du nur entsprechend integrieren. (IUnterschied als lokale Variable)

TimeDiff entspricht der 60 in IUnterschied:=360/60; . Also lokale Variable machen und statt der 60 einfügen.

und ich denke mal es müsste Timer.Interval heißen.

Was dahinter steckt:

i ist der Winkel, in dem der Zeiger zum "Mittelpunkt" steht. Mit Sinus bzw. Cosinus kannst du eine Kreisbewegung machen. Einfach mit cos(degtorad(i)) und sin(degtorad(i)) kriegst du die Richtung raus. cos und sin liegen immer zwischen 1 und -1. Also musst du das Ergebnis noch * die Länge des Zeigers nehmen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
110022 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 287

XP SP2
Delphi 7
BeitragVerfasst: So 02.12.07 12:00 
etwa so?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
IUnterschied:extended=6 ;

begin
IUnterschied:=360/(24*60);

hab keine ahnung wie ich das anstellen soll.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var 
timediff:extended=60 ;

begin
TimeDiff:=(Timer1.Interval*1000)/timediff;



wenns falsch is , was es sehr warscheinlich ist, bitte das richtig
zeigen.

und wie bekomme ich das ziffernblatt perfekt rund
und passend hin?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 02.12.07 14:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
uses Math;

var Deg: real;

const ClockR=100; //Radius der Uhr
      ClockLeft=0; //Left der Uhr
      ClockTop=0; //Top der Uhr

procedure TForm1.Timer1Timer(Sender: TObject);
var dDeg,dTime: real;
begin
 dDeg := (Timer1.Interval*360)/(60*1000); //60*1000 entspricht der Zeit für einen Umlauf. Hier: 60sec=1min

 Canvas.MoveTo(ClockLeft+ClockR,ClockTop+ClockR);
 Canvas.Pen.Color:=clBtnFace;
 Canvas.LineTo((round(cos(degtorad(Deg))*ClockR))+ClockLeft+ClockR,/
               (round(sin(degtorad(Deg))*ClockR))+ClockTop+ClockR);

 Deg := Deg+dDeg;

 Canvas.MoveTo(ClockLeft+ClockR,ClockTop+ClockR);
 Canvas.Pen.Color:=clBlack;
 Canvas.LineTo((round(cos(degtorad(Deg))*ClockR))+ClockLeft+ClockR,
               (round(sin(degtorad(Deg))*ClockR))+ClockTop+ClockR);


end;


das ist der Sekundenzeiger, so wie du ihn haben willst. Die andren Zeiger dann analog machen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)