AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Darstellung im Maßstab

Ein Thema von rajuneon · begonnen am 12. Mär 2009 · letzter Beitrag vom 12. Mär 2009
Antwort Antwort
rajuneon
(Gast)

n/a Beiträge
 
#1

Darstellung im Maßstab

  Alt 12. Mär 2009, 14:04
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!!!
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 14:08
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.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 14:13
Hallo,
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?
  Mit Zitat antworten Zitat
rajuneon
(Gast)

n/a Beiträge
 
#4

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 14:24
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 =)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 14:28
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
rajuneon
(Gast)

n/a Beiträge
 
#6

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 14:53
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!
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Darstellung im Maßstab

  Alt 12. Mär 2009, 15:02
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.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:12 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