Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sinus zeichnen (https://www.delphipraxis.net/13202-sinus-zeichnen.html)

Nikolas 13. Dez 2003 11:44


Sinus zeichnen
 
HI

Ich will in einem image die Sinusfunktion und Näherungsfunktionen darstellen.
Ich hab für das Koordinaten-System dem User die Möglichkeit gegeben, den Zeichenbereich einzustellen(x-achse von a bis b, y-achse von c bis d).
Jetzt bekomm ich es aber nicht hin, die Funktionen einzuzeichen.
Meine Ansatz ist eine for schleife die ich von 0 bis 1000 (image.width) laufen lasse und dann jeweils ein lineto zum nächsten Wert mache.

Ich kann zu jedem x-wert den sinus bestimmen aber jetzt hake ich bei dem Problem einem Sinus-wert die richtige y-Koordinate zum Zeichnen zu geben. :wall:

Wer schonmal so was gebaut hat, könnte mir vielleicht mal einen Ansatz geben. (Bitte keinen Code!!!)

THXbyTOX :mrgreen:

Seniman 13. Dez 2003 12:40

Re: Sinus zeichnen
 
Hallo Toxman,

Versuch es folgendermaßen:
Du hast a,b,c und d gegeben. Zu jedem Punkt innerhalb dieses rechteckigen Bereichs gehört nun ein Punkt auf dem image. Du brauchst also den Zusammenhang zwischen einem Punkt und dem dazugehöreng Punkt, der gezeichnet wird.
Da das Bild nicht verdreht wird, kann man die x und y-Koordinaten einzelnd betrachten. Für die x-Koordinate gilt:
Ein Punkt mit der x=a wird auf dem Bild ganz links abgebildet, d.h. a wird zu 0. Ein Punkt mit x=b wird ganz nach rechts abgebildet, d.h. b wird zu image.width
Daraus erhält man eine lineare Funktion f(x)=width/(b-a)*x+(a*width)/(a-b)
Genauso erhält man für die y-Koordinate eine Funktion g(x)=height/(d-c)*y+(c*height)/(c-d)
Wenn du nun einen Punkt (x,y) ausgerechnet hast, dann zeichnest du auf dem image an die Stelle (f(x),g(y)) die Linie.
Natürlich musst du darauf achten, dass b>a und c>d gilt, sonst kommt es möglicherweise zu einer Division durch 0 oder das Bild steht auf dem Kopf.

Hoffe, es hilft dir weiter,

Grüße
Seniman


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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