Entwickler-Ecke
Sonstiges (Delphi) - Graph einer Funktion zeichnen
XZeranski - Fr 28.03.03 16:25
Titel: Graph einer Funktion zeichnen
Hallo, ich bin noch relativ neu im Delphi programmieren und habe folgende Frage:
Wenn ich einen Funktionswert habe wie kann ich den in einem Bild grafisch darstellen lassen?
Also z.b. für 3*x möchte ich den Graphen zeichnen lassen. Kann ich das mit einem Image und den Canvas befehlen machen? Aber welche Befehle müsste ich benutzen damit ich eine Linie und keine Punkte bekomme?
Thx!
XZeranski - Fr 28.03.03 16:52
Danke für deine Hilfe, Mit LineTo hab ich es eben versucht und für lineare Funktionen funktioniert es wirklich gut. Aber was ist z.b. bei quadratischen Funktionen? Da funktioniert es ja leider nicht mehr...
madigeMade - Fr 28.03.03 17:06
Hi Zeranski!
Da jede Fkt. gleich aufgebaut ist, nämlich das jedem X-Wert ein Y- Wert zugeodnet wird, musst du es auch bei dieser Funktion machen. Jedem X Wert wird ein Y- Wert zugeornet, z.B. für y=x²
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var x,y: real; begin x:=-10; while x<10 do begin x:=x+0.01; y:=x*x; image1.canvas.pixels[round(x+50),round(-y+100)]:=clblack; end; end; |
Versuchs ma...
Gruß de Made
Alibi - Fr 28.03.03 17:11
Klar funktioniert lineto mit nicht-linearen Funktionen. Siehe das Lissajousprogramm. Die Formeln sind alles andere als Linear. :)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var i, y: integer; begin y := 1; canvas.MoveTo(0,0); for i := 1 to 10 do begin y := i * i; canvas.LineTo(i,-y); // - y deswegen, weil die y-Achse umgedreht ist in Delphi end; end; |
XZeranski - Fr 28.03.03 18:42
Danke für eure Hilfen,
@madigeMade: Es erscheint zwar eine Parabel, aber irgendwie sieht die entlang der x-Achse sehr zusammengestaucht aus. Woher kommt das?
@Alibi: Irgendwie funktioniert deine Idee nicht...
XZeranski - Fr 28.03.03 19:08
Also wenn ich für x mal -5 bis 5 nehme wird das nur ein sehr kleines Gebilde. Ich müsste dann wohl den Maßstab umrechnen um ihn an mein Canvas von 500*500 anzugleichen. Aber wo bekomm ich die Werte her damit ich das umrechnen kann?
UGrohne - Fr 28.03.03 19:15
Da gibts sowas wie Mathe :wink: Du brauchst ein Welt- und ein BilschirmkoordinatenSystem, am besten nimmst Du zwei Funktionen, mit denen Du diese umrechnen lassen kannst.
Du hast die linke und rechte Grenze, nehmen wir an -5 und 5 in den Einheiten, -5 entspricht dabei Pixel 0 und 5 dem Image1.Width, daraus ergibt sich, dass 1 auf dem Bildschirm Image1.width/(rechts-links), also image1.width/10 ist. Du gehst dann Pixelweise voran und rechnest den Pixelwert in Weltkoordinaten um (die Formel müsstest Du ja leicht aus dem gerade gesagtem erstellen können), rechnest den y-Wert mit Deiner Formel aus und wandelst diesen y-Wert wieder über eine Funktion (analog zu dem oben) in Bildschirmkoordinaten um, und zeichnest da einen Punkt.
Gruß
XZeranski - Fr 28.03.03 19:32
Also müsste ich bei einem Image von 500*500 Pixel die Formel x² mit 0.02 multiplizieren, da ja eine Einheit auf dem Bildschirm 50 Einheiten auf dem Papier entspricht (bei einem System von -5 bis 5). Also rechne ich 1/50 und erhalte 0.02.
Ist das so korrekt?
Alibi - Fr 28.03.03 20:02
Meine Idee war keine Lösung, die du 1zu1 übernehmen kannst, eher ein Denkanstoß. :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!