AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ändern der x-Werte in einem Koordinatensystem
Thema durchsuchen
Ansicht
Themen-Optionen

Ändern der x-Werte in einem Koordinatensystem

Ein Thema von eve · begonnen am 16. Dez 2003 · letzter Beitrag vom 16. Dez 2003
Antwort Antwort
eve

Registriert seit: 11. Dez 2003
3 Beiträge
 
#1

Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 17:31
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.
Angehängte Dateien
Dateityp: rar graph_307.rar (171,4 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 17:44
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:
for x:= -10 to 10 do
  PlotDot(x, GetValueOf(x));
steht.

Um die gesamte Zeichenfläche Auszunutzen könntest Du etwas in dieser Art:
for xPos:= 0 to Pred(myCanvas.Width) do verwenden, wobei Du die Koordinaten des Bildschirms entsprechend umrechnen könntest, um "wirkliche" Koordinaten zu erhalten:
x:= (XOffset+XPos)*XFactor; Das Ergebnis der Berechnung (GetValueOf(...)) muss anschließend wieder zurückprojiziert werden
yPos:= GetValueOf(x)/YFactor-YOffset; um den Punkt bei (xPos, yPos) zu zeichnen...

Mathematisch: Du benötigst eine lineare Abbildung zur Projektion von Punkten des Anzeigebereichs auf das Ursprungsbild und deren Umkehrfunktion.

Edit: Willkommensgruß
gruß, choose
  Mit Zitat antworten Zitat
eve

Registriert seit: 11. Dez 2003
3 Beiträge
 
#3

Re: Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 18:04
Die Umwandlung in wirkliche Koordinaten funktioniert bereits:
Delphi-Quellcode:
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;
(Diese Verfahren hab ich aus einem andren Thread übernommen)

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.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 19:33
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
function PaintboxToCoords(const APoint: TPoint): TCoord; bzw
function CoordsToPaintbox(const ACoord: TCoord): TPoint mit
Delphi-Quellcode:
type
  TCoord = record
    X, Y: Double;
  end;

function Coord(const AX, AY: Double): TCoord;
begin
  Result.X:= AX;
  Result.Y:= AY;
end;
wg der Übersichtlichkeit auszulagern.

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...
gruß, choose
  Mit Zitat antworten Zitat
eve

Registriert seit: 11. Dez 2003
3 Beiträge
 
#5

Re: Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 20:38
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 von choose:
Mir fällt auf, dass der KoordinatenUrsprung sowie die bisher gezeichneten Funktionen nicht an den neu gewählten Ausschnitt angepasst werden...
Genau das ist eigentlich mein Problem, ich weiss nicht, wie ich das umsetzen kann.


Und noch ne kleine Frage: Wie kann ich die Schriftgröße einer textout Ausgabe einstellen?
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Ändern der x-Werte in einem Koordinatensystem

  Alt 16. Dez 2003, 21:03
Zitat von eve:
hmm, das mit den beiden Funktionen versteh ich irgendwie net.
mein Vorschlag sollte in etwa bedeuten, dass es übersichtlicher ist, die Logik zum Projizieren der Koordinaten von der Darstellung (dem Malen) zu Trennen. Dann wird auch die Umkehrfunktion übersichtlicher, die Du für das Koordinatensystem benötigst.

Zitat von eve:
Zitat von choose:
Mir fällt auf, dass der KoordinatenUrsprung sowie die bisher gezeichneten Funktionen nicht an den neu gewählten Ausschnitt angepasst werden...
Genau das ist eigentlich mein Problem, ich weiss nicht, wie ich das umsetzen kann.
Angenommen, Du hast die besagte Umkehrfunktion, sollte dieser Pseudocode das Problem lösen
  1. Berechne die Bildschirmkoordinaten (x0, y0) der Koordinaten (0,0) des Bildraums (den Koordinaten in denen Deine Funktion "existiert")
  2. Zeichne die X-Achse auf der Zeichenfläche von (0, y0) nach (Width-1, y0)
  3. Zeichne die Y-Achse auf der Zeichenfläche von (x0, 0) nach (x0, Height-1)

Zitat von eve:
Wie kann ich die Schriftgröße einer textout Ausgabe einstellen?
Sieh mal in der Delphi Online-Hilfe (OH) unter TCanvas.Font nach.
gruß, choose
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz