Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ алгоритм Брезенхэма

Автор: GoodWind 26.09.2004 14:52

Господа, кто нибудь может доходчиво обьяснить сабж ?

Автор: GoodWind 26.09.2004 23:52

никто, судя по всему sad.gif

Автор: Altair 27.09.2004 10:59

Алгоритм Брезенхейма служит для построения прямых. Хотя я видел как с помощью него окружность строят smile.gif

Автор: GoodWind 27.09.2004 11:14

Oleg_Z, спасибо, я знаю для чего, я хочу знать КАК smile.gif

Автор: Ozzя 27.09.2004 11:21

http://algolist.manual.ru/graphics/painting/line.php

Автор: GoodWind 27.09.2004 11:27

Ozzя, сенкс :p4:

Автор: P@sh@ 27.09.2004 13:54

Есть у меня какой-то алгоритм Брезенхема для эллипса... сам не смотрел даже, и не помню, где достал (может здесь?smile.gif)... см. вложение.

а для рисования линий много раз им пользовался (или похожим), нашел тут одну из самых первых собственных реализаций:

Код
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;



Прикрепленные файлы
Прикрепленный файл  Bresenham_Ellipse.txt ( 8.02 килобайт ) Кол-во скачиваний: 516

Автор: GoodWind 27.09.2004 20:53

P@sh@, пасибо