Graphics Reference
In-Depth Information
procedure
DrawLine
(integer
x
0
, y
0
, x
1
, y
1
)
begin
integer
dx, ax, sgnx, dy, ay, sgny, x, y, d;
dx := x1 - x0; ax := abs (dx)*2; sgnx := Sign (dx);
dy := y1 - y0; ay := abs (dy)*2; sgny := Sign (dy);
x := x0; y := y0;
if
ax > ay
then
{ x increases faster than y }
begin
d := ay - ax/2;
while true do
begin
Draw (x,y);
if
x = x1
then
Exit;
if
d ≥ 0
then
begin
y := y + sgny; d := d - ax;
end;
x := x + sgnx; d := d + ay;
end
end
else
{ y increases faster than x }
begin
d := ax - ay/2;
while true do
begin
Draw (x,y);
if
y = y1
then
Exit;
if
d ≥ 0
then
begin
x := x + sgnx; d := d - ay;
end;
y := y + sgny; d := d + ax;
end
end
end;
integer function
Sign (
real
x)
if
x < 0
then return
(-1)
else return
(+1);
Algorithm 2.5.2.2.
A Bresenham line-drawing algorithm.