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.
Search WWH ::




Custom Search