- •Компьютерная графика Курс лекций
- •Оглавление
- •Предисловие
- •Лекция 1. Введение
- •1.1. История компьютерной графики
- •1.2.Области применения компьютерной графики
- •1.3. Классификация графических изображений
- •1.4. Виды компьютерной графики
- •1.4.1. Растровая графика
- •1.4.2. Векторная графика
- •1.4.3. Фрактальная графика
- •Лекция 2. Аппаратная база машинной графики
- •2.1. Видеосистема персонального компьютера
- •2.2. Цвет
- •2.3. Форматы графических файлов
- •Лекция 3. Отображение геометрических объектов
- •1. Двумя точками ( а и в ).
- •Лекция 4. Аппарат проецирования
- •4.1. Аксонометрические проекции
- •4.2. Способы преобразования комплексного чертежа
- •Лекция 5. Представление объектов и их машинная генерация
- •5.1. Аффинные преобразования на плоскости
- •5.2. Растровая развертка отрезка
- •3.1 Растровая развертка отрезка
- •5.3. Алгоритм вывода окружности
- •5.4. Кривая Безье
- •5.5. Отсечение отрезка
- •5.6. Закраска области, заданной цветом границы
- •5.7. Удаление невидимых линий и поверхностей
- •Алгоритм робертса
- •Лекция 6. Фрактальная графика
- •6.1. Алгоритм построения фрактала
- •6.2. Природные фракталы
- •6.3. Геометрические фракталы
- •6.4. Алгебраические фракталы
- •6 .5. Стохастические фракталы
- •Лекция 7. Графические редакторы
- •Лекция 8. СЖатие изображений
- •8.1. Необратимое сжатие
- •8.2. Обратимое сжатие
- •8.3. Общие положения алгоритмов сжатия изображений
- •8.4. Алгоритмы архивации без потерь
- •8.5. Алгоритмы архивации с потерями
- •Литература
6.4. Алгебраические фракталы
Рис.
85. Фрактал Мандельброта
Вторая большая группа фракталов – алгебраические. Свое название они получили, за то, что их строят, используя простые алгебраические формулы.
Получают их с помощью нелинейных процессов в n-мерных пространствах. Известно, что нелинейные динамические системы обладают несколькими устойчивыми состояниями. Состояние, в котором окажется динамическая система после некоторого числа итераций, зависит от начальных условий. Поэтому каждое устойчивое состояние (аттрактор) обладает некоторой областью начальных состояний, при которых система обязательно перейдет в рассматриваемые конечные состояния. Таким образом, фазовое пространство разбивается на области притяжения аттракторов.
Самыми известными из них являются множества Мандельброта и Жюлиа, Бассейны Ньютона и т.д.
Фрактал Мандельброта назван по имени французского математика польского происхождения Бенуа Мандельброта, известного исследователя фракталов.
Множество Мандельброта получают следующим образом: строится отображение z'=fc(z), где числа z и c - комплексные.
Алгоритм построения множества Мандельброта выглядит следующим образом:
выбираем значение c
z:=0 n:=0
z:=f(z)
inc(n)
Если не достигнуто максимальное значение итераций или значение z не превысило максимального значения, то повторять шаги 3 и 4.
Наиболее часто используется формула z = z2 + c, так как она наиболее проста в применении. Раскладывая уравнение на действительную и мнимую часть, получаем следующее:
Re: x2 - y2 + a Im: 2xy + b, приняв, что z = x + yi и c = a + bi.
Цвет обычно выбирают по числу итераций, но есть и другие способы. Текст программы выглядит следующим образом.
Program M2;
Uses Graph, Crt;
Type
TComplex = Record
X : Real;
Y : Real;
End;
Const
iter = 50;
max = 16;
Var
z, t, c : TComplex;
x, y, n : Integer;
Cancel : Boolean;
gd, gm : Integer;
mx, my : Integer;
Begin
Cancel := False;
Randomize;
gd := Detect;
InitGraph(gd,gm,'e:\bp\bgi');
Mx := GetMaxX div 2;
My := GetMaxY div 2;
For y := -my to my do
For x := -mx to mx do Begin
n := 0;
C.X := X * 0.005;
C.Y := Y * 0.005;
z.X := 0;
z.Y := 0;
While (sqr(z.X) + sqr(z.Y) < max) and (n < iter) do Begin
t := z;
Z.X := sqr(t.X) - sqr(t.Y) + C.X;
Z.Y := 2 * t.X * t.Y+ C.Y;
Inc(n);
If keypressed then cancel := true;
End;
If n < iter then Begin
PutPixel(mx + x,my + y,16 - (n mod 16));
End;
If cancel then exit;
End;
Readkey;
CloseGraph;
end.
А теперь опишем программу словами. Для всех точек на комплексной плоскости в некотором интервале вычисляем достаточно большое количество раз z = z2 + c, каждый раз проверяя абсолютное значение z. Если это значение больше максимального, то рисуем точку с цветом, вычисляемым по количеству итераций, иначе рисуем точку черного цвета.
Черный цвет в середине показывает, что в этих точках функция стремится к нулю - это и есть множество Мандельброта. За пределами этого множества функция стремится к бесконечности. А самое интересное - это границы множества. Они то и являются фрактальными. Если рассмотреть увеличение, то можно увидеть самоподобие фигуры.
Увеличение фракталов. Для того чтобы увеличить данный объект, необходимо изменить коэффициенты в следующем куске кода:
C.X:=X*0.005;
C.Y:=Y*0.005;
Чем меньше число, тем больше увеличение и наоборот. Для того чтобы сместить множество, нужно прибавлять или вычитать числа в том же куске кода. Рассмотрим в общем случае:
C.X := X*m + dx;
C.Y := Y*m + dy;
З
десь
m задет увеличение, dx - смещение по
горизонтали, а dy - смещение по вертикали.
Например, положив, что m=0.0001, dx=-1.2, dy=-0.3,
мы получим примерно то, что изображено
на рисунке (рис. 86).
Рис. 86
