Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Конспект лекций (полный)

.pdf
Скачиваний:
70
Добавлен:
13.11.2013
Размер:
1.08 Mб
Скачать

Проецирование трехмерного пространства на плоскость

Проекция из трехмерного пространства XYZ может быть получена при помощи следующей операции:

Перспективные преобразования

Перспективная проекция получается путем преобразования и проецирования на некоторую двухмерную плоскость наблюдения.

Перспективная проекция на плоскость ось Z.

XYZH

=

xyz1

*

1 0 0 0

0 1 0 0

0 0 0 0

0 0 r 1

=

x y 0 (zr +1)

Численная и компьютерная графика

Простой пошаговый алгоритм вычерчивания отрезков

Объект

Геометрическая

Представление

 

модель

на экране

Поскольку экран растрового дисплея может рассматривать матрицу дискретных элементов (пикселей), каждый из которых может быть подсвеченным, нельзя непосредственно провести отрезок от одной точки к другой.

Процесс определения пикселей наилучшим образом аппроксимирует заданный участок и называется разложением в растровом сочетании с процессом построчного визуального изображения.

В большинстве алгоритмов вычерчивается простейшим пошаговым методом.

Приведем пример подобного алгоритма:

(начало)

шаг = приращение

1. if (позиция – конец) < точность then 4

if позиция > конец then 2

if позиция < конец then 3

2.позиция = позиция – шаг go to 1

3.позиция = позиция + шаг go to 1

4.(stop. END)

Алгоритм Брезентхема

Хотя данный алгоритм первоначально был разработан для цифровых графических построителей, он в равной степени подходит для растровых устройств.

Алгоритм выбирает оптимальные растры из координат для построения отрезка. В процессе работы одна из координат либо X, либо Y, в зависимости от углового коэффициента изменяется на 1, изменение другой координаты равно нулю или единице. Это зависит от расстояния действий положения отрезков, ближайшим координатам сетки.

Алгоритм построен так, что требуется только проверить знак ошибки. Проиллюстрируем на рисунке для отрезка, лежащего в диапазоне от 0 до 1.

1 2

Y

0.1

0.0

1.0

X

y ≤ 1 x

Ошибка = ошибка +

y x

.

На рисунке можно увидеть, что угловой коэффициент из точки (0.0) > 1/2.

Приведём алгоритм для первого октанта.

х, y,

х

, у – целые

е – вещественное

1) инициализация переменных х = х1

у= у1

х= х21

у= у21

е= у*Δх-1/2

2) начало основного цикла for i:=1 to Δx

plot (x,y) while (e>0)

y = y+1; e = e-1; and while x = x+1

e = e+

end;

end;

у х

Обобщённый целочисленный алгоритм

Предполагается, что концы отрезка не совпадают и все переменные считаются целыми. Функция sign возвращает -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно.

Инициализация переменных:

х = х1

у= у1

х= abs (x2-x1)

y = abs (y2-y1)

S1 = sign (x2-x1)

S2 = sign (y2-y1)

Обмен значений х и у в зависимости от углового коэффициента наклона отрезка.

if Δy > Δx then

временная = Δx

х= у

у= временная

else

обмен = 0

end if

_

Инициализация е с поправкой на половину пикселя

_

е = 2* y – х

Основной цикл:

for i:= 1 to х plot (x, y)

_

while ( е ) ≥ 0

if обмен = 1 then x = x+S1

else

y = y+S2 end if

_

_

е = е - 2 * х

end while

if обмен = 1 then y = y+S2

else

x = x + S1 else if

_ е

next i

finish

=

_ е

+ 2 * y

Пошаговый алгоритм для генерации окружности

Все переменные целые.

Инициализация переменных:

x1 = 0 y1 = R

i = 2(1-R)

предел = 0 plot (x, y)

if y1 ≤ предел then 4

Выделение первого или второго, четвертого или пятого или третьего слагаемого.

if

i < 0 then 2

if

i > 0 then 3

if

i = 0 then 20

δ = 2 * i + 2 * y1 – 1 if δ ≤ 0 then 10

if δ > 0 then 20

определить 4 или 5

δ = 2 * i + 2 * x1 – 1 if δ ≤ 0 then 10

if δ > 0 then 20

Выполение шагов:

10xi = xi + 1

i= i + 2 * xi + 1

goto 1

20 xi = xi + 1 yi = yi – 1

i = i + 2 * xi – 2 * yi + 2

goto 1

30yi = yi – 1

i= i – 2 * yi + 1 goto 1

80 finish