* * * * * * *
Předpokládám existenci procedury
procedure putpixel(byte c, integer y, integer x)
Parametry uváďím v tomto neobvyklém pořadí aby procedura přesně
odpovídala céčkové verzi (pascal a C předávají parametry v obráceném
pořadí)
procedure bres_line_2 (integer x1, integer y1, integer x2,
integer y2, byte c)
(* Tato funkce ilustruje použití 2. metody implementace *
* bresenhamova algoritmu. (čtyři varianty) *)
var
deltax, deltay, d: integer;
begin
if x2 > x1 then deltax := x2 - x1; else deltax := x1 - x2;
if y2 > y1 then deltax := y2 - y1; else deltax := y1 - y2;
(* Trocu neohrabaný překlad operátoru ?: *)
if deltax >= deltay then begin
(* Řídící proměnná byla vybrána X *)
if x1 > x2 then begin (* Jestli jsme v opačném směru *)
x1 := x1 xor x2; x2 := x2 xor x1; x1 := x1 xor x2;
y1 := y1 xor y2; y2 := y2 xor y1; y1 := y1 xor y2;
end;
if y2 > y1 then begin
(* Přičítáme Y *)
d := -(deltax shr 1);
while x1 <= x2 do begin
if d > 0 then begin d := d - deltax; inc(y1); end;
putpixel(c, y1, x1);
inc(x1);
d := d + deltay;
end;
end; else begin
(* Odčítáme Y *)
d := -(deltax shr 1);
while x1 <= x2 do begin
if d > 0 then begin d := d - deltax; dec(y1); end;
putpixel(c, y1, x1);
inc(x1);
d := d + deltay;
end;
end;
end; else begin
(* Řídící proměnná byla vybrána Y *)
if y1 > y2 then begin (* Jestli jsme v opačném směru *)
x1 := x1 xor x2; x2 := x2 xor x1; x1 := x1 xor x2;
y1 := y1 xor y2; y2 := y2 xor y1; y1 := y1 xor y2;
end;
if x2 > x1 then begin
(* Přičítáme X *)
d := -(deltay shr 1);
while y1 <= y2 do begin
if d > 0 then begin d := d - deltay; inc(x1); end;
putpixel(c, y1, x1);
inc(y1);
d := d + deltax;
end;
end; else begin
(* Odčítáme Y *)
d := -(deltay shr 1);
while y1 <= y2 do begin
if d > 0 then begin d := d - deltay; dec(x1); end;
putpixel(c, y1, x1);
inc(y1);
d := d + deltax;
end;
end;
end;
end; (* Konec procedury *)
Poznámka ke zdrojáku: Na mém počítači se nenalézá kompilátor pascalu,
takže na rozdíl od céčkového zdrojáku, tenhle jsem nezkoušel, takže
při přepisu mohly vzniknout překlepy. V tom případě si to asi budete
muset trochu odladit. Ta céčková verze mi každopádně fungovala.
- Bulb -
výheň