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

lection_CG4

.pdf
Скачиваний:
6
Добавлен:
11.03.2016
Размер:
691.98 Кб
Скачать
Рисуем горизонтальную линию с координатами (x1,y) – (x2,y).

Алгоритмы заполнения, которые используют математическое описание контура

Математическим описанием может служить уравнение y = f(x) для окружности, эллипса и другой кривой

3. Заполнение прямоугольника

Пусть заданы координаты (x1,y1) – левая верхняя, (x2,y2) – правая нижняя.

for (y = y1; y <= y2; y++)

{

}

 

 

2. Заполнение круга

 

 

Используем алгоритм вывода контура.

xc-x,yc-y

xc+x,yc-y

Там вычисляются координаты

xc-y,yc-x

xc+y,yc-x

пикселей контура в границах одного.

Нужно соединить пары точек

xc-y,yc+x

xc+y,yc+x

на контуре, расположенные

симметрично относительно оси y.

xc-x,yc+y

xc+x,yc+y

 

xc

Алгоритмы заполнения, которые используют математическое описание контура

3. Заполнение полигона

Закрашиваем полигон отрезками прямых линий (горизонтали). 1. Найти min{yi}, max{yi} среди всех вершин Pi.

2. Выполнить цикл по y от ymin до ymax

{

3. Нахождение точек пересечения всех отрезков контура с горизонталью y.

Координаты xj точек записать в массив. 4. Сортировка массива {xj} по возрастанию x. 5. Вывод горизонтальных отрезков

(x0,y) - (x1,y) (x2,y) - (x3,y)

……………

(x0,y) - (x1,y)

Свойство топологии контура фигуры:

*любая прямая пересекает любой замкнутый контур четное число раз.

*если горизонталь y совпадает с yi вершины Pi, тогда анализируем точку:

а) если горизонталь пересекает контур (P0,P4), то в массив запишем одну точку;

б) если горизонталь касается точки (P1,P2,P3,P5), тогда, либо запишем две, либо ни одной.

Наложение текстур на полигон

Общий алгоритм заполнения: Пробегаем все точки полигона (x,y).

Для каждой точки вычисляем координаты текстуры (xт.yт). По координатам текстуры определяем цвет пикселя.

Преобразование координат (x,y) => (xт.yт) имеет аффинный вид:

Для трех точек укажем соответствие

xтi = A*xi + B*yi + C;

yтi = D*xi + E*yi + F;

Пусть xТi = Xi , yTi = Yi. Получаем систему

X1 = A*x1

+ B*y1 + C;

 

X2 = A*x2

+ B*y2 + C;

 

X3 = A*x3

+ B*y3 + C;

det A =

и

 

 

 

Y1

= D*x1

+ E*y1

+ F;

 

Y2

= D*x2

+ E*y2

+ F;

 

Y3

= D*x3

+ E*y3

+ F;

det B =

Методом Крамера находим

A = (det A)/(det t);

B = (det B)/(det t); det C = C = (det C)/(det t);

Аксонометрическая проекция

X1

y1

1

 

 

 

 

x1

y1

1

 

 

 

 

 

 

X2

y2

1

 

 

 

det t =

x2

y2

1

 

X3

y3

1

 

 

 

 

x3

y3

1

 

x1

X1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

X2

1

 

 

 

 

 

 

 

x3

X3

1

 

 

 

 

 

 

 

x

1

1

X

1

 

 

Аналогично

 

 

 

y

 

 

 

вычисляем D,E,F.

x2

y2

X2

 

 

x3

y3

X3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наложение текстур на полигон

Перспективная

проекция

Цепочка преобразований:

Мировые

Видовые

 

Экранные

координаты

координаты

Проецирование

координаты

x,y,z

Z,Y,Z

Xп,Yп,Zп

Xэ,Yэ,Zэ

Рассмотрим вывод перспективной проекции полигона с текстурой

2

 

B

AB - горизонталь

 

 

 

A

 

 

 

3

P

 

 

1,2,3,4 – вершины полигона (заданы

 

 

 

 

 

 

экранными координатами)

 

 

 

 

4

P – произвольная точка полигона

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Базовая операция: по известным видовым координатам концов отрезка находим видовые координаты точки отрезка, заданной координатами в плоскости проецирования.

Видовые координаты точки A(X,Y,Z) по известным видовым координатам точек 1 и 2 - (X1,Y1,Z1) и (X2,Y2,Z2):

X – X1

Y – Y1

Z – Z1

 

 

 

 

 

 

X2 – X1

Y2 – Y1

Z2 – Z1

Фракталы

Фрактал Мандельброта

Фрактал можно определить как объект довольно сложной формы, получающийся в результате выполнения простого итерационного цикла.

Итерационность (рекурсивность) обуславливает такие свойства фракталов как «самоподобие». Отдельные части похожи по форме на весь фрактал в целом. В 1975 году французский математик Беллуа Мандельброт издал книгу «The fractal. Geometry of Nature».

Фрактал Мандельброта

Для каждого изображения необходимо

 

выполнить цикл итераций

2

Zk+1 = Zk + Z0 , где k = 0,1,2….

Zk = Xk + i Yk комплексное число X0,Y0 стартовые координаты

Для каждой точки выполняется ограниченное число итераций: до тех пор, пока |Zk| 2.

Z2k = (X2 - Y2 ) + i (2Y)

Фракталы

Фракталы Джулия и Ньютона

Фрактал Джулия

 

Фрактал Ньютона

 

 

 

 

 

 

 

 

 

Zk+1 = Zk2 +C,

Zk+1

=

3Zk4 +1

4Zk3

где С комплексная константа

 

 

Z0 = X0 + i Y0 – координата

 

Условие завершения: |Zk| 2

точки

Условие завершения: |Zk |

 

 

0

Фракталы

Геометрические фракталы

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

Кривая Коха

Фракталы Фракталы, формируемые системой итеративных функций

Xk+1

= Fx(Xk,Yk);

Веточка папоротника

Yk+1

= Fy(Xk,Yk);

 

Зададим координаты опорных точек 1 и 2. Находим точку 3. Она образуется при повороте точки 2 на угол α, относительно точки 1.

X3 = (X1–X2)cosα-(Y2–Y1)sinα+X1;

Y3 = (X1–X2)sinα+(Y2–Y1)cosα+Y1;

Находим точку 4. Она находится на отрезке 1-3. Пусть (1-4)/(1-3) = k, причем 0<k<1.

X4 = X1(1 - k) + X3 k;

Y4 = Y1(1 - k) + Y3 k;

Зададим длину и угол наклона ветвей, которые выходят из точки 4.

Найдем координату точки 5. Пусть соотношение отрезков (4-5)/(5-3) = k1. Тогда:

X5 = X4 (1 – k1) + X3 k1;

Y5 = Y4 (1 – k1) + Y3 k1;

Точки 6 и 7 – это точка 5, повернутая относительно точки 4 на углы β и -β соответственно:

X6 = (X5 – X4)cosβ - (Y5 – Y4)sinβ + X4;

Y6 = (X5 – X4)sinβ + (Y5 – Y4)cosβ + Y4;

X7 = (X5 – X4)cosβ + (Y5 – Y4)sinβ + X4;

Y7 = - (X5 – X4)sinβ + (Y5 – Y4)cosβ + Y4.

Кроме расчетов опорных точек на каждом шаге будем рисовать один отрезок 1-4. Также будем менять цвет и толщину в зависимости от номера итерации. Затем повторяем цикл рекурсии для отрезков 4-3, 4-6, 4-7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]