Hallo,
ich bin dabei, ein Programm zu erstellen, welches (unter Anderem auch) eine Sinusfunktion zeichnet.
Ich habe allerdings ein theoretisches Problem:
Wenn ich den Graph zeichnen will, muss ich ja Pixel des Image ansprechen. Der für den Sinus ausgegebene Wert ist aber eine Kommazahl, damit können keine (ganzzahligen) Pixelwerte rauskommen.
Beim Kompilieren funktioniert es also wegen der Datentypen nicht.
Ich wäre über einen Denkanstoß sehr dankbar!
Grüße,
katt
Zeichnen der Sinusfunktion im TImage
-
- Lazarusforum e. V.
- Beiträge: 560
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: Zeichnen der Sinusfunktion im TImage
Hallo katt,
herzlich willkommen im Forum.
So kannst Kommazahlen in Integerzahlen umwandeln:
Round rundet die Zahl (2,7 --> 3,0)
Trunc schneidet die Ziffern hinterm Komma ab.
Viel Spaß bei der Aufgabe.
Gruß, linkat
herzlich willkommen im Forum.
So kannst Kommazahlen in Integerzahlen umwandeln:
Code: Alles auswählen
i:=Round(r);
i:=Trunc(r);
Trunc schneidet die Ziffern hinterm Komma ab.
Viel Spaß bei der Aufgabe.
Gruß, linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: Zeichnen der Sinusfunktion im TImage
Erstmal danke, Linkat.
Die beiden Funktionen zum Runden kannte ich schon.
Das Problem ist, dass mein Koordinatensystem die Einheit 1 = 1 Pixel hat.
Ich schätze, ich muss das vergrößern, oder? Sonst wird der Wert ja stets auf 0 oder 1 gerundet, und das wird bei einer so kleinen Einteilung ja keine Kurve.
Grüße,
katt
Die beiden Funktionen zum Runden kannte ich schon.
Das Problem ist, dass mein Koordinatensystem die Einheit 1 = 1 Pixel hat.
Ich schätze, ich muss das vergrößern, oder? Sonst wird der Wert ja stets auf 0 oder 1 gerundet, und das wird bei einer so kleinen Einteilung ja keine Kurve.
Grüße,
katt
-
- Lazarusforum e. V.
- Beiträge: 560
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: Zeichnen der Sinusfunktion im TImage
Hallo katt,
zur Darstellung deiner Kurve musst du eine Koordinatentransformation machen. Mit Hilfe des Dreisatzes musst du den Werte- und Definitionsbereich zu den Bildschirmkoordinaten (Pixel) deiner Sinuskurve ins richtige Verhältnis setzen. Aber bedenke, dass die y-Achse des Canvas nach unten gerichtet ist.
Gruß, Linkat
zur Darstellung deiner Kurve musst du eine Koordinatentransformation machen. Mit Hilfe des Dreisatzes musst du den Werte- und Definitionsbereich zu den Bildschirmkoordinaten (Pixel) deiner Sinuskurve ins richtige Verhältnis setzen. Aber bedenke, dass die y-Achse des Canvas nach unten gerichtet ist.
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: Zeichnen der Sinusfunktion im TImage
Danke für den Tipp! Ich wollte das mit dem Verhältnis nur nochmal bestätigt haben. Ich habe ja auch schon lineare & quadratische Funktionen programmiert, daher weiß ich, wie das TImage funktioniert.Linkat hat geschrieben:Mit Hilfe des Dreisatzes musst du den Werte- und Definitionsbereich zu den Bildschirmkoordinaten (Pixel) deiner Sinuskurve ins richtige Verhältnis setzen. Aber bedenke, dass die y-Achse des Canvas nach unten gerichtet ist.

Einen schönen Abend noch,
katt
- jwdietrich
- Beiträge: 173
- Registriert: Mo 20. Okt 2008, 20:50
- OS, Lazarus, FPC: macOS 10.4-14.1, Windows 2000-11, Raspbian (L 3.7.0, FPC 3.2.2)
- CPU-Target: PowerPC, Intel, ARM
- Wohnort: Hattingen, NRW
- Kontaktdaten:
Re: Zeichnen der Sinusfunktion im TImage
Für die meisten Anwendungen wird es geschickter sein, die Sinusfunktion mit TAChart statt in ein TImage zu zeichnen.