![]() |
Ändern der x-Werte in einem Koordinatensystem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte ein Programm schreiben, das Funktionen 5.Grades einliest und den Graph in einem Koordinatensystem darstellt. Es soll außerdem möglich sein, nur einen bestimmten Teil des Graphen zu betrachten (durch Eingeben der betrachteten x- und y-Werte). Die Darstellung der Funktion in einem Koordinatensystem hab ich bereits umgesetzt, jedoch nur für x-Werte von -10 bis 10 und für die gleichen y-Werte. Ich hab aber keine Ahnung, wie ich den andren Teil umsetzen soll. Die Suche im Forum hat mir auch nicht weiter geholfen. Für einige Ratschläge wär ich dankbar. |
Re: Ändern der x-Werte in einem Koordinatensystem
Hallo eve,
das hatte ich ganz übersehen: Herzlich Willkommen bei der Delphi-PRAXiS! Ich habe mir Deinen Code noch nicht angesehen (habe hier keinen TotalCommander...), gehe aber davon aus, dass dort irgendwo etwas in der Art
Delphi-Quellcode:
steht.
for x:= -10 to 10 do
PlotDot(x, GetValueOf(x)); Um die gesamte Zeichenfläche Auszunutzen könntest Du etwas in dieser Art:
Delphi-Quellcode:
verwenden, wobei Du die Koordinaten des Bildschirms entsprechend umrechnen könntest, um "wirkliche" Koordinaten zu erhalten:
for xPos:= 0 to Pred(myCanvas.Width) do
Delphi-Quellcode:
Das Ergebnis der Berechnung (GetValueOf(...)) muss anschließend wieder zurückprojiziert werden
x:= (XOffset+XPos)*XFactor;
Delphi-Quellcode:
um den Punkt bei (xPos, yPos) zu zeichnen...
yPos:= GetValueOf(x)/YFactor-YOffset;
Mathematisch: Du benötigst eine lineare Abbildung zur Projektion von Punkten des Anzeigebereichs auf das Ursprungsbild und deren Umkehrfunktion. Edit: Willkommensgruß :oops: |
Re: Ändern der x-Werte in einem Koordinatensystem
Die Umwandlung in wirkliche Koordinaten funktioniert bereits:
Delphi-Quellcode:
(Diese Verfahren hab ich aus einem andren Thread übernommen)
pixelh:=paintbox.Height/(maxy-miny); // pixelh = Pixel pro Hoeheneinheit
pixelw:=paintbox.Width/(maxx-minx); // pixelw = Pixel pro Hoeheneinheit MoveTo(-2,0); for spalte:=-1 to paintbox.Width-1 do begin x:=minx+spalte/pixelw; y:=a*x*x*x*x*x+b*x*x*x*x+c*x*x*x+d*x*x+e*x+f; reihe :=paintbox.height-trunc(y*pixelh-miny*pixelh); LineTo(spalte,reihe); end; Nun wird der Graph zwar immer korrekt dargestellt, aber im Verhältnis zu den x- und y-Achsen stimmt es dann doch wieder net. Am besten mal das Programm ausführen, einen Graph mit den vorgegebenen Werten zeichnen lassen und anschließend den Darstellungsbereich der x- bzw. y-Achse ändern. Dann wird vielleich klarer was ich mein. |
Re: Ändern der x-Werte in einem Koordinatensystem
Mir fällt auf, dass der KoordinatenUrsprung sowie die bisher gezeichneten Funktionen nicht an den neu gewählten Ausschnitt angepasst werden...
Du solltest das Zeichnen des Urspungs ebenfalls über die Projektion laufen lassen. Es böte sich darüber hinaus an, die Berechnung der Projektion in eine Funktion der Art
Delphi-Quellcode:
bzw
function PaintboxToCoords(const APoint: TPoint): TCoord;
Delphi-Quellcode:
mit
function CoordsToPaintbox(const ACoord: TCoord): TPoint
Delphi-Quellcode:
wg der Übersichtlichkeit auszulagern.
type
TCoord = record X, Y: Double; end; function Coord(const AX, AY: Double): TCoord; begin Result.X:= AX; Result.Y:= AY; end; Das mit den bisherigen Funktionen bei Veränderung des Ausschnitts wird schwierig. Weil Du die Zeichenfläche löschen musst, wäre es notwendig die Koeffizieten als 6-Tupel in einer geeigneten Struktur (zB dynamisches Array) abzulegen und die Zeichenroutine anschließend für jedes Element des Arrays erneut durchzuführen... |
Re: Ändern der x-Werte in einem Koordinatensystem
hmm, das mit den beiden Funktionen versteh ich irgendwie net.
Über das Problem mit der bisherigen Funktion bei Änderung der x- bzw. y-Werte muss man sich auch keine Gedanken machen, das brauch ich eigentlich net. Hab es jetzt ma so gemacht, dass bei Änderung dieser Werte die Zeichenfläche gelöscht wird. Außerdem hab ich den Code nochma allgemein bissl übersichtlicher gemacht, hoffe man versteht es jetzt besser. Zitat:
Und noch ne kleine Frage: Wie kann ich die Schriftgröße einer textout Ausgabe einstellen? |
Re: Ändern der x-Werte in einem Koordinatensystem
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 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