Помощь - Поиск - Пользователи - Календарь
Полная версия: алгоритм Брезенхэма
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
GoodWind
Господа, кто нибудь может доходчиво обьяснить сабж ?
GoodWind
никто, судя по всему sad.gif
Altair
Алгоритм Брезенхейма служит для построения прямых. Хотя я видел как с помощью него окружность строят smile.gif
GoodWind
Oleg_Z, спасибо, я знаю для чего, я хочу знать КАК smile.gif
GoodWind
Ozzя, сенкс :p4:
P@sh@
Есть у меня какой-то алгоритм Брезенхема для эллипса... сам не смотрел даже, и не помню, где достал (может здесь?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;
GoodWind
P@sh@, пасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.