Entwickler-Ecke
Multimedia / Grafik - Graphen-skalierung
Fabian E. - Do 13.09.07 16:51
Titel: Graphen-skalierung
hallo alle zusammen!
im laufe eines info projektes möchte einen graphen zeichnen!das klappt auch schon sehr gut!
allerdings kann ich immer nur einen bestimmten teil des graphen zeigen, da der rest außerhalb des fensers liegen würde.
nun suche ich eine möglichkeit diesen graphen so zu skalieren das er komplett anzegeigt wird!
hier ist meine zeichenroutine:
Delphi-Quelltext
1: 2: 3: 4:
| Moveto(0,Form3.Image1.Height-Trunc(jung_arr[0])); Pen.Color := clRed; for i := 0 to Schritt-1 do LineTo(i * 100+30,Round(Form3.Image1.Height-jung_arr[i])); |
wobei
jung_arr: Array[0..35] of Extended;ist
und die eigentlichen werte enthält.
wär cool wenn ihr mir helfen könntet! :)
MfG
Allesquarks - Do 13.09.07 18:00
Das macht man über einen Dreisatz alla: a/b=c/d
a=xwert
b=maximal Zeichenbarer x-Wert in der Grafik
c=effektive Bildschirmposition (oder Pixelstelle)
d=Pixelstelle des maximal Zeichenbaren x-Wertes also bei 800*600 entweder 800 oder 600
BenBE - Do 13.09.07 21:33
Dann implementiert man aber meist auch noch die entsprechende Verschiebung mit:
Delphi-Quelltext
1:
| p_x := p_x_Offset + (v_x - v_x_Offset) * (p_xperunit); |
bzw.
Delphi-Quelltext
1:
| p_x := p_x_Offset + (v_x - v_x_Offset) * (p_pixeltotal / v_unitstotal); |
MfG,
BenBE.
Edit: Eine Formel kurz korrigiert.
Fabian E. - Do 13.09.07 22:12
okay vielen dank! :)
ich habe das problem jetzt folgendermaßen gelöst:
Delphi-Quelltext
1: 2:
| SkalierungX := Form3.ClientWidth/Schritt; SkalierungY := groeste_Population/Form3.ClientHeight; |
Delphi-Quelltext
1: 2: 3: 4: 5:
| Moveto(0,Form3.Image1.Height-Trunc(jung_arr[0])); Pen.Color := clRed; for i := 0 to Schritt-1 do LineTo(Round(i * skalierungX), Round(Form3.Image1.Height-jung_arr[i]/skalierungY)); |
das klappt perfekt :)
aber wie immer habe ich natürlich BenBE's beitrag nicht verstanden... :oops:
kannst du das vllt noch ein bissl genauer erläutern? :)
das wär nett!
MfG
BenBE - Do 13.09.07 22:25
Naja, v steht für Value, also deine zu zeichnenden Werte, p steht für Pixel, also Pixelbasierte Angaben.
v_Osset ist demzufolge der Wert, deran der durch p_Offset angegebenen Stelle dargestellt werden soll.
v_x ist dein zu zeichnender Wert. Mit diesem berechnest Du p_x: Also den Pixel-Wert auf deiner Zeichenfläche.
v_UnitsTotal ist die Anzahl an Zu zeichnenden Einheiten in X-Richtung. Beispiel:
Du hast ein Koordinaten-System von -10 bis +10. In diesem Fall wären 20 (Max-Min = 10 - -10 = 20) Einheiten zu zeichnen.
p_PixelTotal ist die Bereite deiner Zeichenfläche - 1 ("Center Pixel" ;-)).
Auch hier wieder ein Rechenbeispiel: Wenn Du eine Zeichenfläche von 301 px Breite hast und ein Koordinaten-System von -10 bis 10 darauf zeichnen willst, musst Du die Trennstriche alle 15 Pixel zeichnen. v_x_Offset wäre in dem Fall 0 und p_x_Offset = 150 (Wenn Du v_x = 0 in der Mitte haben willst).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!