[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
>> I was wondering if anyone could show me the equations (and perhaps a
>> demo in standard pascal) of the following shapes. What I need to know is
>> where to plot the point.
>> Circle. (I've tried using the equation taught to me at school, but it
>> Line (What I would like would be to be able to plot a line by giving it
There seems yet again to be enough interest/need so I'll post this stuff just
ONCE more.... somebody put this in SWAG or something.... PLEASE!!!
[Okay Sean, here you go! -Kerry]
You need a plot(x,y) procedure and a global color variable to use these as
posted.
}
{bresenham's line}
procedure line(x, y, x2, y2 : integer);
var
d, dx, dy,
ai, bi,
xi, yi : integer;
begin
if (x < x2) then
begin
xi := 1;
dx := x2 - x;
end
else
begin
xi := - 1;
dx := x - x2;
end;
if (y < y2) then
begin
yi := 1;
dy := y2 - y;
end
else
begin
yi := - 1;
dy := y - y2;
end;
plot(x, y);
if dx > dy then
begin
ai := (dy - dx) * 2;
bi := dy * 2;
d := bi - dx;
repeat
if (d >= 0) then
begin
inc(y, yi);
inc(d, ai);
end
else
inc(d, bi);
inc(x, xi);
plot(x, y);
until (x = x2);
end
else
begin
ai := (dx - dy) * 2;
bi := dx * 2;
d := bi - dy;
repeat
if (d >= 0) then
begin
inc(x, xi);
inc(d, ai);
end
else
inc(d, bi);
inc(y, yi);
plot(x, y);
until (y = y2);
end;
end;
{filled ellipse}
procedure disk(xc, yc, a, b : integer);
var
x, y : integer;
aa, aa2,
bb, bb2,
d, dx, dy : longint;
begin
x := 0;
y := b;
aa := longint(a) * a;
aa2 := 2 * aa;
bb := longint(b) * b;
bb2 := 2 * bb;
d := bb - aa * b + aa div 4;
dx := 0;
dy := aa2 * b;
vLin(xc, yc - y, yc + y);
while (dx < dy) do
begin
if (d > 0) then
begin
dec(y);
dec(dy, aa2);
dec(d, dy);
end;
inc(x);
inc(dx, bb2);
inc(d, bb + dx);
vLin(xc - x, yc - y, yc + y);
vLin(xc + x, yc - y, yc + y);
end;
inc(d, (3 * (aa - bb) div 2 - (dx + dy)) div 2);
while (y >= 0) do
begin
if (d < 0) then
begin
inc(x);
inc(dx, bb2);
inc(d, bb + dx);
vLin(xc - x, yc - y, yc + y);
vLin(xc + x, yc - y, yc + y);
end;
dec(y);
dec(dy, aa2);
inc(d, aa - dy);
end;
end;
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]