Autor Beitrag
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Do 13.09.07 16:51 
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:
ausblenden 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..35of Extended;ist
und die eigentlichen werte enthält.

wär cool wenn ihr mir helfen könntet! :)

MfG
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.09.07 21:33 
Dann implementiert man aber meist auch noch die entsprechende Verschiebung mit:

ausblenden Delphi-Quelltext
1:
p_x := p_x_Offset + (v_x - v_x_Offset) * (p_xperunit);					

bzw.
ausblenden Delphi-Quelltext
1:
p_x := p_x_Offset + (v_x - v_x_Offset) * (p_pixeltotal / v_unitstotal);					


MfG,
BenBE.

Edit: Eine Formel kurz korrigiert.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.


Zuletzt bearbeitet von BenBE am Do 13.09.07 22:17, insgesamt 1-mal bearbeitet
Fabian E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Do 13.09.07 22:12 
okay vielen dank! :)
ich habe das problem jetzt folgendermaßen gelöst:
ausblenden Delphi-Quelltext
1:
2:
SkalierungX := Form3.ClientWidth/Schritt;                           //AuflösungX / größter Wert X-Achse
SkalierungY := groeste_Population/Form3.ClientHeight;               //größter Wert Y-Achse / AuflösungY

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.