Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit einem Diagramm (https://www.delphipraxis.net/70113-problem-mit-einem-diagramm.html)

KosMottchen 25. Mai 2006 11:29


Problem mit einem Diagramm
 
Liste der Anhänge anzeigen (Anzahl: 1)
huhu,

hab nen programm für de schule geschrieben, wo ich am ende nen s-t-diagramm haben will...

ich hab alles hinbekommen, bis auf das mit der kurve... das sieht mir sehr unlogisch aus...

kann mir da mal jmd helfen und gucken, ob das so richtig ist?

die achsen stimmen ja... nur eben die kurve, die er ja anhand von best werten eintragen muss, die sieht nicht richtig aus :(

danke schonmal.

mfg kos

Delphi-Quellcode:
{$R *.dfm}

Procedure stDiagramm (s,t:integer);
begin
  t:=t+30;
  s:=370-s;
  Form1.Image1.Canvas.LineTo(s,t);

end;



Function Geschwindigkeit (a,v0,t:real):real; // Funktion Geschwindigkeit-Berechnen
begin
  result:=a*t+v0;      //ergebnis zuweisen
end;

Function Weg (a,t,v0:real):real;    // Funktion Weg-Berechnen
begin
  result:=(a/2)*sqr(t)+(v0*t);  //ergebnis zuweisen
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with stringgrid1 do begin
  cells[0,0]:='      Zeit';
  cells[1,0]:=' Geschwindigkeit';
  cells[2,0]:='    Weg';
end;

with Image1.Canvas  // canvas=leinwand
do begin // Koordinaten-Achsen zeichnen

MoveTo (30,370); // an den Punkt P1(30,370) gehen
LineTo (635,370); // von P1 eine linie nach P2 (635,370) ziehen
MoveTo (635,370); // an den Punkt P2 gehen
LineTo (625,365); // einen Strich nach P3 (625,365) ziehen
MoveTo (635,370); // an den Punkt P2 gehen
LineTo (625,375);// einen Strich nach P4 (625,375) ziehen
MoveTo (30,370); // an den Punkt P1(30,370) gehen
LineTo (30,30); // einen Strich an P5 (30,30) ziehen
MoveTo (30,30); // an den Punkt P5 gehen
LineTo (35,40); // einen Strich an den Punkt P6 (35,40) ziehen
MoveTo (30,30); // an den Punkt P5 gehen
LineTo (25,40); // einen Strich an den Punkt P7 (25,40) ziehen

end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var a,v,v0,t,za,ez,s:real;
    i,o:integer;
begin
Val (Form1.Edit1.Text,a,o); // Beschleunigung
Val (Form1.Edit2.Text,v0,o); // Anfangsgeschwindigkeit
Val (Form1.Edit3.Text,za,o); // Zeitabstände
Val (Form1.Edit4.Text,ez,o); // Endzeit

with Form1.StringGrid1 do begin
rowcount:=round(ez/za+2);
t:=0; // Startwert: zeit=0

Image1.Canvas.MoveTo (30,370); // auf den Ursprung setzen

for i:=1 to rowcount do begin
cells[0,i]:=floattostr(t); // Zeit in SG
v:=Geschwindigkeit (a,v0,t); // Funktion Geschwindigkeit aufrufen
cells[1,i]:=floattostr(v);  // Geschw in SG
s:=Weg (a,t,v0);      // Funktion Weg aufrufen
cells[2,i]:=floattostr(s);   // Weg in SG
t:=t+za;  // Zeit um Zeitabstand erhöhen
stDiagramm (round(s),round(t))    // Aufruf Prozedur stDiagramm


end;
end;
end;


end.

pszopp 25. Mai 2006 16:20

Re: Problem mit einem Diagramm
 
Hallo KosMottchen,

Zitat:

Zitat von KosMottchen
Delphi-Quellcode:
{$R *.dfm}

Procedure stDiagramm (s,t:integer);
begin
  t:=t+30;
  s:=370-s;
  Form1.Image1.Canvas.LineTo(s,t);
end;
...

Du musst bei
Delphi-Quellcode:
Form1.Image1.Canvas.LineTo(s, t)
s und t vertauschen, da t bestimmt auf der x-Achse augetragen werden soll.
Auf jeden Fall solltest du die Werte noch skalieren.
Der Weg nimmt Werte zwischen 0 und 4600 an, und soll auf einer Höhe von 370 gezeichnet werden.
Sobald der Weg den Wert von 370 überschreitet, wird außerhalb des Canvas gezeichnet.

Hier mal ein bisßchen Pseudo-Code, der hoffentlich weiterhilft :-D

Skalierung von s:
s := Round(s / (MaxS - MinS) * ZeichenHöhe);

Skalierung von t:
t := Round(t / (MaxT - MinT) * ZeichenBreite);


Gruß,
pszopp

KosMottchen 25. Mai 2006 17:14

Re: Problem mit einem Diagramm
 
Zitat:

Zitat von pszopp
Hier mal ein bisßchen Pseudo-Code, der hoffentlich weiterhilft :-D

Skalierung von s:
s := Round(s / (MaxS - MinS) * ZeichenHöhe);

Skalierung von t:
t := Round(t / (MaxT - MinT) * ZeichenBreite);


Gruß,
pszopp

huhu,

vielen dank schonmal...

also da muss ich aber nicht nur oben in der prozedur das s und t vertauschen, sondern dann auch komplett im ganzen quellcode das s und das t umtauschen gelle?

und kannst du mir zu dem skalieren ei bissel mehr sagen?

mfg kos

pszopp 25. Mai 2006 18:03

Re: Problem mit einem Diagramm
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

schau mal in meinen Anhang.

Grüß,
pszopp


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.

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