Bresenham Linien zeichnen

Für Installationen unter Windows
Antworten
dasinternet
Beiträge: 2
Registriert: Mi 3. Mär 2021, 21:54

Bresenham Linien zeichnen

Beitrag von dasinternet »

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

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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).

dasinternet
Beiträge: 2
Registriert: Mi 3. Mär 2021, 21:54

Re: Bresenham Linien zeichnen

Beitrag von dasinternet »

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?

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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
Zuletzt geändert von h-elsner am Di 9. Mär 2021, 22:39, insgesamt 2-mal geändert.

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

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).
Außer dem Rasterzeichnen, kann das nie funktioniert haben. Du bist, unter uns gesagt, beim zweiten Schritt, nicht beim letzten.
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.
unit2.zip
(2.02 KiB) 135-mal heruntergeladen
Jetzt bist aber wirklich du mal dran. Bei Fragen bitte fragen.

Was soll der Timer dabei?

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Bresenham Linien zeichnen

Beitrag von six1 »

Morgen ist Abgabe...
er hat entweder
a) die Lösung von jemand anderem fertig bekommen
oder
b) geschmissen

ich tippe auf a)
Gruß, Michael

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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

Beitrag von h-elsner »

six1 hat geschrieben:
Mi 10. Mär 2021, 06:43
a) die Lösung von jemand anderem fertig bekommen
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

Antworten