Есть у меня какой-то алгоритм Брезенхема для эллипса... сам не смотрел даже, и не помню, где достал (может здесь?
)... см. вложение.
а для рисования линий много раз им пользовался (или похожим), нашел тут одну из самых первых собственных реализаций:
Код
procedure line(x1,y1,x2,y2:integer; c:byte);
var dx,dy,dn,x,y:integer;
function sgn(n:integer):shortint;
begin
if n<0 then sgn:=-1
else if n>0 then sgn:=1
else sgn:=0;
end;
function inr(a,b,c:integer):boolean;
begin
inr:=(a>=b)and(a<=c);
end;
begin
dx:=x2-x1;
dy:=y2-y1;
x:=x1; y:=y1;
if abs(dx)>=abs(dy) then begin
dn:=abs(dx) div 2;
while (x<>x2) do begin
pset(x,y,c);
x:=x+sgn(dx);
dn:=dn-abs(dy);
if dn<=0 then begin
dn:=dn+abs(dx);
y:=y+sgn(dy);
end;
end;
end else begin
dn:=abs(dy) div 2;
while y<>y2 do begin
pset(x,y,c);
y:=y+sgn(dy);
dn:=dn-abs(dx);
if dn<=0 then begin
dn:=dn+abs(dy);
x:=x+sgn(dx);
end;
end;
end;
pset(x,y,c);
end;