ВУЗ:
Составители:
Основы компьютерной графики для программистов 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
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »