Основы компьютерной графики для программистов. Казанцев А.В. - 38 стр.

UptoLike

Составители: 

Основы компьютерной графики для программистов 38
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
Далее приводится листинг процедуры на языке Паскаль, реализующей алгоритм
Брезенхема.
Procedure Bresenham(x1,y1,x2,y2,Color: integer);
var
dx,dy,incr1,incr2,d,x,y,xend: integer;
begin
dx:= ABS(x2-x1);
dy:= Abs(y2-y1);
d:=2*dy-dx; {начальное значение для d}
incr1:=2*dy; {приращение для d<0}
incr2:=2*(dy-dx); {приращение для d>=0}
if x1>x2 then {начинаем с точки с меньшим знач. x}
begin
x:=x2;
y:=y2;
xend:=x1;
end
else
begin
x:=x1;
y:=y1;
xend:=x2;
end;
PutPixel(x,y,Color); {первая точка отрезка}
While x<xend do
begin
x:=x+1;
if d<0 then
d:=d+incr1 {выбираем нижнюю точку}
else
begin
y:=y+1;
d:=d+incr2; {выбираем верхнюю точку, y-возрастает}
end;
PutPixel(x,y,Color);
end;{while}
end;{procedure}
Отсечение
Перед тем, как исследовать методы получения изображений более сложных, чем
отрезки прямых, рассмотрим проблему, незримо присутствующую в большинстве задач
компьютерной графики. Эта проблема отсечения изображения по некоторой границе,
например, по границе экрана, или, в общем случае, некоторого прямоугольного окна.
Рассмотрим эту задачу применительно к отрезкам прямых. Некоторые из них
полностью лежат
внутри области экрана, другие целиком вне ее, а некоторые
пересекают границу экрана. Правильное отображение отрезков означает нахождение
точек пересечения их с границей экрана и рисование только тех их частей, которые
попадают на экран. Один из очевидных способов отсечения отрезков состоит в
определении точек пересечения прямой, содержащей отрезок, с каждой из
четырех
прямых, на которых лежат границы окна и проверки не лежит ли хотя бы одна точка
пересечения на границе. В этом случае для каждой пары сторона-отрезок необходимо
Основы компьютерной графики для программистов                                                                  38
____________________________________________________________________________________________________________________



Далее приводится листинг процедуры на языке Паскаль, реализующей алгоритм
Брезенхема.
Procedure Bresenham(x1,y1,x2,y2,Color: integer);
var
dx,dy,incr1,incr2,d,x,y,xend: integer;
begin
  dx:= ABS(x2-x1);
  dy:= Abs(y2-y1);
  d:=2*dy-dx;       {начальное значение для d}
  incr1:=2*dy;      {приращение для d<0}
  incr2:=2*(dy-dx); {приращение для d>=0}
   if x1>x2 then    {начинаем с точки с меньшим знач. x}
 begin
  x:=x2;
  y:=y2;
  xend:=x1;
end
else
begin
  x:=x1;
  y:=y1;
  xend:=x2;
end;
 PutPixel(x,y,Color);    {первая точка отрезка}
 While x