Хелпикс

Главная

Контакты

Случайная статья





Список алгоритмов рисования отрезков



 

 

Алгоритмы построения отрезка — графические алгоритмы аппроксимации отрезка на дискретном графическом устройстве (растеризации), например, мониторе или принтере.

Стандартными требованиями к алгоритмам являются скорость работы, равномерная яркость и прямой вид полученных отрезков, совпадение начальных и конечных координат полученной и идеальной линии. Для дискретного устройства данные требования зачастую невыполнимы. Отрезок нельзя провести из одной точки в другую однозначно (кроме горизонтальных, вертикальных и наклонённых под углом 45° отрезков), начало и конец отрезка имеют координаты ближайших к ним пикселов, расстояние между пикселами диагональных отрезков больше, чем между пикселами вертикальных и горизонтальных.

 

Список алгоритмов рисования отрезков

  • Алгоритм DDA-линии — простой алгоритм, использующий вещественную арифметику.
  • Алгоритм Брезенхэма — оптимизированный алгоритм, использующий целочисленную арифметику и только операции сложения и вычитания.
  • Алгоритм Ву — модифицированный алгоритм Брезенхэма, обеспечивающий сглаживание.

 

Реализация на Object Pascal – рисование отрезка

Procedure Swap(var x,y:Integer);

var t:Integer;

begin

t:=x;x:=y;y:=t;

end;

 

Procedure Line(Canvas: TCanvas; x1,y1,x2,y2:integer);

var dx,dy,i,sx,sy,check,e,x,y:integer;

begin

   dx:=abs(x1-x2);

   dy:=abs(y1-y2);

   sx:=Sign(x2-x1);

   sy:=Sign(y2-y1);

   x:=x1;

   y:=y1;

   check:=0;

   if dy>dx then begin

       Swap(dx,dy);

       check:=1;

   end;

   e:= 2*dy - dx;

   for i:=0 to dx do begin

       Canvas.Pixels[x,y]:=clBlack;

       if e>=0 then begin

           if check=1 then inc(x,sx) else inc(y,sy);

           dec(e,2*dx);

       end;

       if check=1 then inc(y,sy) else inc(x,sx);

       inc(e,2*dy);

   end;

end;

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.