PROGRAM BRESENHAM; (* Berechnung einer Geraden nach dem Bresenham-Algorithmus *) procedure plot(x, y, modus: INTEGER); begin end; Procedure Line (x1, y1, x2, y2, farbe : INTEGER); { Die Prozedur verbindet die Punkte P1(x1,y1) und P2(x2,y2) mit der in } { 'farbe' spezifizierten Zeichenfarbe. } VAR xl, yl, x, y, { Hilfsvariablen } dx, dy, a, b, e, help, { Variablentausch } ende : INTEGER; { Kennzeichnung Linienende } winkelhalbierende : BOOLEAN; BEGIN { Prozedur 'Line' Anfang } { Defaultwerte für Variablen } xl := 1; yl := 1; x := x1; y := y1; ende := x2; dx := x2 - x1; dy := y2 - y1; winkelhalbierende := False; { Spiegelung an y-Achse } IF dx < 0 THEN BEGIN dx := -dx; xl := -1; END; { Spiegelung an x-Achse } IF dy < 0 THEN BEGIN dy := -dy; yl := -1; END; { Spiegelung an Winkelhalbierender des 1. Quadranten } IF dx < dy THEN BEGIN help := x; x := y; y := help; help := dx; dx := dy; dy := help; help := xl; xl := yl; yl := help; ende := y2; winkelhalbierende := True; END; { Hilfsvariablen } a := dy shl 1; b := dx shl 1 - a; e := a - dx; { Zeichnen der Geraden } IF winkelhalbierende THEN BEGIN Plot (y, x, farbe); WHILE x <> ende DO BEGIN x := x + xl; IF e > 0 THEN BEGIN y := y + yl; e := e - b; END ELSE e := e + a; Plot (y, x, farbe); END END ELSE BEGIN Plot (x, y, farbe); WHILE x <> ende DO BEGIN x := x + xl; IF e > 0 THEN BEGIN y := y + yl; e := e - b; END ELSE e := e + a; Plot (x, y, farbe); END END; END; { Prozedur 'Line' Ende } BEGIN line(100,10,200,20,1); END.