Bresenham Linien zeichnen
-
- Beiträge: 2
- Registriert: Mi 3. Mär 2021, 21:54
Bresenham Linien zeichnen
Ich bin dabei ein "Windows-Applikation" auf Lazarus zu machen. Der Programm muss: Nachbildung des Bresenham-Algorithmus für Linien und Kreise machen können.
Ich bin bei dem letzten Schritt, denn ich hab die Rechnung und den Raster... alles beendet. Mir fehlt nur, dass ich den Programm in ein Timer laufen lassen (alles ich es versucht habt, hängte der Programm).
Außerdem ich weiß nicht, was ich ändern soll damit der Programm auch Kreise zeichnen kann.
Bitte werfen sie Blick auf dem Programm.
#Ich muss mein Projekt bis Donnerstag (11,03) abgeben.
#Ich hab den Code, wo das Problem gibt, kommentiert
Hier können Sie das Programm sehen.
https://drive.google.com/file/d/1XRDXHh ... sp=sharing
Hier nochmal (falls Erste nicht funktioniert)
https://drive.google.com/drive/folders/ ... sp=sharing
Ich bin bei dem letzten Schritt, denn ich hab die Rechnung und den Raster... alles beendet. Mir fehlt nur, dass ich den Programm in ein Timer laufen lassen (alles ich es versucht habt, hängte der Programm).
Außerdem ich weiß nicht, was ich ändern soll damit der Programm auch Kreise zeichnen kann.
Bitte werfen sie Blick auf dem Programm.
#Ich muss mein Projekt bis Donnerstag (11,03) abgeben.
#Ich hab den Code, wo das Problem gibt, kommentiert
Hier können Sie das Programm sehen.
https://drive.google.com/file/d/1XRDXHh ... sp=sharing
Hier nochmal (falls Erste nicht funktioniert)
https://drive.google.com/drive/folders/ ... sp=sharing
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Was darf man denn unter "in einem Timer laufen" lassen verstehen? Was soll den passieren, wenn der Timer abläuft?
Der Timer läuft zwar immer, aber er keine Funktion, da nichts passiert, wenn er abläuft. Irgenwas sollte doch beim Event OnTimer passieren? Da ist aber nix.
Und warum wird der Timer (nochmal) gestartet, wenn man Zurück zu Startseite drückt.
Beim Einlesen der Daten musst du irgendwie abfangen, wenn Unfug eingegeben wurde oder die Felder leer sind. Das sehe ich nirgends.
Gruß HE
Der Timer läuft zwar immer, aber er keine Funktion, da nichts passiert, wenn er abläuft. Irgenwas sollte doch beim Event OnTimer passieren? Da ist aber nix.
Und warum wird der Timer (nochmal) gestartet, wenn man Zurück zu Startseite drückt.
Beim Einlesen der Daten musst du irgendwie abfangen, wenn Unfug eingegeben wurde oder die Felder leer sind. Das sehe ich nirgends.
Gruß HE
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Das Programm beendet sich nicht richtig. Es bleibt im Speicher hängen. Irgendwas ist da oberfaul. Mir fallen noch viele Fragen ein, aber das ganze ist sehr mühsam, weil alles in globalen Variablen gespeichert ist und nicht klar ist, für was die sind.
Global Variable sind der sicherste Weg in alle möglichen Fehler. Was macht zum Beispiel i?
Was bedeutet i:=i; Das ändert doch nichts.
Das ganze Konstrukt bei procedure TForm2.ZeichnenClick(Sender: TObject); ist mir ein Rätsel.
Das Einlesen geht schon schief, wenn eines der Felder leer bleibt oder falsch ausgefüllt wird (z.B. ich scheibe 1,0 rein).
Global Variable sind der sicherste Weg in alle möglichen Fehler. Was macht zum Beispiel i?
Was bedeutet i:=i; Das ändert doch nichts.
Das ganze Konstrukt bei procedure TForm2.ZeichnenClick(Sender: TObject); ist mir ein Rätsel.
Das Einlesen geht schon schief, wenn eines der Felder leer bleibt oder falsch ausgefüllt wird (z.B. ich scheibe 1,0 rein).
-
- Beiträge: 2
- Registriert: Mi 3. Mär 2021, 21:54
Re: Bresenham Linien zeichnen
die Zeichnen Button ist um diese Linie auf dem Raster zu zeichnen.
Der Programm, kann die Edit-Nummer lesen, die Bresenham-Algorithmus berechnen und die Linien zeichnen.
Das soll aber in ein ordentlich Form gebraucht, was ich nicht geschafft habe.
Können Sie es ändern oder mir sagenwas ich machen soll, damit der Programm die Bresenham Linie zeichnen kann?
Der Programm, kann die Edit-Nummer lesen, die Bresenham-Algorithmus berechnen und die Linien zeichnen.
Das soll aber in ein ordentlich Form gebraucht, was ich nicht geschafft habe.
Können Sie es ändern oder mir sagenwas ich machen soll, damit der Programm die Bresenham Linie zeichnen kann?
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Woran erkennst du, dass das Programm zeichnen kann? Ich sehe gar nichts. Mich interessiert immer noch, wofür i sein soll und warum das alles globale Variablen sind.
Ich betrachte mal nur Form2:
p_einlesen würde ich mal durch SpinEdits komplett ersetzen. Damit ersparst du dir alle Eingabeprüfungen, auch die, die du nicht gemacht hast. Damit fallen auch die ersten globalen Variablen weg, nämlich xs, ys, xe und ye.
Ich gebe für x und y den Anfangswert 1 und als Endwert 11 ein. Es wird aber nichts gezeichnet.
Floodfill macht nur den ganzen Hintergrund rot.
Gruß HE
Ich betrachte mal nur Form2:
p_einlesen würde ich mal durch SpinEdits komplett ersetzen. Damit ersparst du dir alle Eingabeprüfungen, auch die, die du nicht gemacht hast. Damit fallen auch die ersten globalen Variablen weg, nämlich xs, ys, xe und ye.
Ich gebe für x und y den Anfangswert 1 und als Endwert 11 ein. Es wird aber nichts gezeichnet.
Floodfill macht nur den ganzen Hintergrund rot.
Gruß HE
Zuletzt geändert von h-elsner am Di 9. Mär 2021, 22:39, insgesamt 2-mal geändert.
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Sehe ich das richtig, dass p_berechnen nur Fixwerte berechnet und nie in einer Schleife ausgeführt werden muss?
Die eigentliche Berechnung scheint beim Zeichen gemacht zu werden, richtig? Was macht I?
Du musst schon etwas mitmachen...
Gruß HE
Die eigentliche Berechnung scheint beim Zeichen gemacht zu werden, richtig? Was macht I?
Du musst schon etwas mitmachen...
Gruß HE
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Frage: Was macht i?
Antwort: Nix. Das brauchen wir nur als Laufvariable zum Zeichnen der Gitternetzlinien. Sollte also da eine lokale Variable sein.
Was lernen wir daraus? Laufvariablen sollten IMMER lokale Variablen sein, um wilde und schwer zu findende Fehler zu vermeiden.
Tip: Teile die Aufgaben, die dein Programm ausführen soll in Prozeduren und Funktionen auf, die du dann einfach aufrufen und wiederverwenden kannst:
- Initialisieren der Werte,
- Berechnen der x, y Positionen,
- Zeichnen der kleinen Quadrate an Position x, y.
Mein Linienzeichnen ist fertig. Wie weit bist du?
Was mir fehlt, ist das Löschen der alten Linie, wenn eine neue gezeichnet wird.
Gruß HE
Antwort: Nix. Das brauchen wir nur als Laufvariable zum Zeichnen der Gitternetzlinien. Sollte also da eine lokale Variable sein.
Was lernen wir daraus? Laufvariablen sollten IMMER lokale Variablen sein, um wilde und schwer zu findende Fehler zu vermeiden.
Tip: Teile die Aufgaben, die dein Programm ausführen soll in Prozeduren und Funktionen auf, die du dann einfach aufrufen und wiederverwenden kannst:
- Initialisieren der Werte,
- Berechnen der x, y Positionen,
- Zeichnen der kleinen Quadrate an Position x, y.
Mein Linienzeichnen ist fertig. Wie weit bist du?
Was mir fehlt, ist das Löschen der alten Linie, wenn eine neue gezeichnet wird.
Gruß HE
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
Außer dem Rasterzeichnen, kann das nie funktioniert haben. Du bist, unter uns gesagt, beim zweiten Schritt, nicht beim letzten.dasinternet hat geschrieben: Sa 6. Mär 2021, 15:28 Ich bin bei dem letzten Schritt, denn ich hab die Rechnung und den Raster... alles beendet. Mir fehlt nur, dass ich den Programm in ein Timer laufen lassen (alles ich es versucht habt, hängte der Programm).
Die Rechnung ist falsch und das Zeichnen der Linien bzw. Kästchen ist falsch.
Die Programmlogik ist falsch bzw. fehl ganz, aber das hast du ja bereits auskommentiert.
Um dir zu helfen, habe ich unit2.pas mal kommentiert. Jetzt bist aber wirklich du mal dran. Bei Fragen bitte fragen.
Was soll der Timer dabei?
Re: Bresenham Linien zeichnen
Morgen ist Abgabe...
er hat entweder
a) die Lösung von jemand anderem fertig bekommen
oder
b) geschmissen
ich tippe auf a)
er hat entweder
a) die Lösung von jemand anderem fertig bekommen
oder
b) geschmissen
ich tippe auf a)
Gruß, Michael
- h-elsner
- Lazarusforum e. V.
- Beiträge: 282
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Bresenham Linien zeichnen
So lernt man aber nichts...
Der Quelltext war schon schwer zu verstehen, für mich jedenfalls. Sah für mich in der Anmutung auf den ersten Blick wie C aus. C ist ja perfekt geeignet, unlesbaren Code zu schreiben....
Gruß HE