Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Darstellung im Maßstab (https://www.delphipraxis.net/130745-darstellung-im-massstab.html)

rajuneon 12. Mär 2009 14:04


Darstellung im Maßstab
 
Hallo!

Ich habe ein Problem, an dem ich mir jetzt schon seit 2h die Zähne ausbeiße und nicht mal die Formulierung des Threadtitels ist einfach! Der Name passt nicht, aber ich weiß keinen besseren.

Also:

Ich habe einen Timer, in dem die x- und y-Koordinaten eines schiefen Wurfes berechnet werden.
Die Paintbox, in der ich das Ganze (durch lineto im timer) darstelle, ist 601 Pixel breit. Ich habe einen Faktor eingebaut, der es mir erlaubt, den Maßstab zu regulieren, also wenn der Faktor (von mir Darstellungsfaktor genannt) 1 ist, entspricht ein Pixel einem Meter, ist er 20, entsprechen 20 Pixel einem Meter. W ist die Wurfweite.

Delphi-Quellcode:
Timer1Timer.....

if W < 601 then
begin
  xx := round(x * darstfaktor);
  yy := round(y * darstfaktor);
end;

PaintBox1.Canvas.LineTo(xx,yy*(-1){Weil es ja eine umgekehrte Parabel ist} + 597{Paintbox-Höhe}); {Wurfparabel wird während des Wurfes gezeichnet}
Wenn nun aber schon die Wurfweite größer als 601m ist, reicht es ja nicht, den Darstellungsfaktor auf 1 zu setzen, um alles darzustellen. Ich will aber alles darstellen =)

Darum habe ich mir ausgedacht, doch einfach den x- bzw. y-Wert solange durch 2 zu teilen, bis es zur Gänze dargestellt werden kann.

Delphi-Quellcode:
 {auch im Timer}
if W > 601 then
begin
  darstfaktor := 1;
  repeat
    xx := round(x / 2);
    yy := round(y / 2);
  until W < 601;
end;
War wohl irgendwie falsch ausgedacht -.- Der ganze Mist geht nicht.
Ein bischen Hilfe wäre sehr nett! Hab auch nichts dagegen, das komplett anders zu machen! :-)

Vielen Dank im Voraus!!!

alleinherrscher 12. Mär 2009 14:08

Re: Darstellung im Maßstab
 
Kannst du nicht einfach vor der simlation ausrechnen, wie weit der wurf geht. Dann teilst du die breite der paintbox durch die wurfweite und das wird dein neuer darstellungsfaktor.

nahpets 12. Mär 2009 14:13

Re: Darstellung im Maßstab
 
Hallo,
Zitat:

Zitat von rajuneon
Delphi-Quellcode:
 {auch im Timer}
if W > 601 then
begin
  darstfaktor := 1;
  repeat
    xx := round(x / 2);
    yy := round(y / 2);
  until W < 601;
end;

das kann doch nicht gehen.
W ist am Anfang > 601 und wird in der Schleife nicht geändert, wie soll da die Schleife beendet werden. W wird immer > 601 bleiben, so dass W < 601 nie erfüllt sein wird. Die Endebedingung müsste sich doch irgendwie aus xx und yy ergeben oder täusche ich mich da?

rajuneon 12. Mär 2009 14:24

Re: Darstellung im Maßstab
 
Zitat:

Zitat von alleinherrscher
Kannst du nicht einfach vor der simlation ausrechnen, wie weit der wurf geht. Dann teilst du die breite der paintbox durch die wurfweite und das wird dein neuer darstellungsfaktor.

Ja kann ich schon...aber da xx und yy die gerundeten Werte sind, sind sie immer mindestens 1, das round(); aufrundet und auch abrunden auf 0 wär ja sinnlos, weil ich dann ja wieder keine darstellung habe.

Zitat:

das kann doch nicht gehen.
W ist am Anfang > 601 und wird in der Schleife nicht geändert, wie soll da die Schleife beendet werden. W wird immer > 601 bleiben, so dass W < 601 nie erfüllt sein wird. Die Endebedingung müsste sich doch irgendwie aus xx und yy ergeben oder täusche ich mich da?
Das stimmt natürlich auch wieder =)

alleinherrscher 12. Mär 2009 14:28

Re: Darstellung im Maßstab
 
Also ich versteh das nicht so ganz. Es bringt ja auch nix, den Darstellungsfaktor zu runden. Du musst anschließend deine Position vom Wurf (x und y nehme ich an) mit dem Darstellungsfaktor multiplizieren und DANACH runden.

Beispiel:

Wurfweite=1200m
Paintboxbreite=600Pixel
Darstellungsfaktor= 600/1200=0.5

x und y ist die Position deines Wurfobjekts in Metern, dann berechnet sich die Position deines Wurfobjekts auf der Paintbox mit


x_paintbox=round(x*Darstellungsfaktor)
y_paintbox=round(y*Darstellungsfaktor)


Grüße

rajuneon 12. Mär 2009 14:53

Re: Darstellung im Maßstab
 
Du hast ja recht! Vielen Dank! Jetzt klappt's einigermaßen. Nur, dass, wenn man 2 Würfe hintereinander simuliert und sie alle Werte gleich haben, aber andere Abwurfgeschwidnigkeiten, dann decken sich die kurven, obwohl sie das in der realität ja nicht täten.
Aber da kriegt der User jetzt einfach eine showmessage. Danke!

alleinherrscher 12. Mär 2009 15:02

Re: Darstellung im Maßstab
 
Ich nehme an, dass das ein Schulprojekt ist? Wenn du eindruck machen willst, dann solltest du noch eine Skala einbauen, also praktisch ein lineal, dass dir die Weite anzeigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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