![]() |
Lineare Funktionen
Nabend Leute,
ich habe ein kleines Problem und hoffe, dass ihr mir weiterhelfen könnt. Ich habe ein kleines Programm geschrieben, mit dem die Anzahl der Stimmen von Personen etc. in einem Säulendiagramm ausgegeben werden soll. Irgendwie werden die Balken zu groß oder zu klein. Paintbox : 361x361 Ich habe bei x=20 angefangen und x=341 aufgehört. Bei y=66 angefangen und y=331 aufgehört. Hoffe ihr könnt mir weiterhelfen, da ich schon viel versucht habe und nichts funktionierte. lg procedure TForm1.Button1Click(Sender: TObject); var a,b,c,d,e,f :single; begin if (Edit1.Text='') or(edit2.text='') or (edit3.Text='') or (edit4.text='') then showmessage ('Bitte Werte eingeben!') else begin with paintbox1.Canvas do begin pen.width:=2; moveto(20,66); lineto(20,331); lineto(341,331); moveto(13,265); lineto(20,265); moveto(13,199); lineto(20,199); moveto(13,133); lineto(20,133); moveto(13,66); lineto(20,66); Textout(1,35,'Stimmen'); a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=strtofloat(edit3.text); d:=strtofloat(edit4.Text); e:=a+b+c+d; f:=(e)*0.5; textout(0,193,(floattostr(f))); textout(0,60,(floattostr(e))); brush.color:=clred; fillrect(rect(60,330,100,round (260-(a)))); brush.color:=clblue; fillrect(rect(140,330,180,round (260-(b)))); brush.color:=clyellow; fillrect(rect(220,330,260,round (260-(c)))); brush.color:=clgreen; fillrect(rect(300,330,340,round (260-(d)))); end; end; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var t: integer; begin PaintBox1.Invalidate; end; end. |
AW: Lineare Funktionen
Benutze doch bitte Delphi-Tags, dann ist der Code viel besser zu lesen (entweder über den "Helm" im Beitragseditor oder mit
Code:
). Und zu Deinem Problem: meinst Du jetzt Prozentrechnung, oder wie genau sollen die Säulen dargestellt werden?
[delphi]Code[/delphi]
|
AW: Lineare Funktionen
Ok danke für den Tipp ;)
Hier mein Problem, ach ja bitte nicht bei den Bezeichnungen wundern ^^ ![]() |
AW: Lineare Funktionen
Du kannst nicht einfach die Werte einfach von der Pixelhöhe der Balken abziehen. Du musst sie in Relation setzen.
so ähnlich: BalkenhöhePixel = Wert * Pixel_Y-Achse/MaxWert_Y-Achse (bitte Formel ggf überprüfen) |
AW: Lineare Funktionen
Das sollte sich doch mit einfacher Prozentrechnung hinbekommen lassen. Die 130 entsprechen dann 100 %, die 23 wäre demnach 17,7 % usw. Nun nimmst Du die Anzahl der Pixel von der unteren zur oberen Kante, das entspricht dann wiederum 100 %. Wenn Du nun davon 17,7 % errechnest, weißt Du, wie hoch der Balken werden muss. Bei dem ganzen aber bitte mit Gleitkommazahlen rechnen und erst bei der Ausgabe (= Zeichnen) runden, sonst geht das wahrscheinlich in die Hose.
[edit] BTW: Man kann auch an seinen Beitrag Grafiken anhängen, dann bleiben sie uns erhalten. [/edit] |
AW: Lineare Funktionen
Ja und wenn ich statt 23, 376 habe? Das sind ja keine 17,7% mehr davon?
Also so :
Delphi-Quellcode:
?
fillrect(rect(60,330,100,round ((a*100/(a*100/e)))));
Ich checks grad gar nicht ,sorry. |
AW: Lineare Funktionen
Dann ändert sich doch auch die Anzahl, oder nicht?
|
AW: Lineare Funktionen
Ja die Anzahl ändert sich ja , trotzdem versteh ich nicht genau was du mit de Pixeln von der unteren bis zur oberen Kante meinst.
Die Pixel von dem Balken? |
AW: Lineare Funktionen
Ist das Diagramm nicht immer gleich hoch?
|
AW: Lineare Funktionen
Da Diagramm an sich ist immer gleich hoch, nur die Verteilung der Stimmen ändert sich ja im Verhältnis zur Gesamtanzahl.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz