Российский государственный гуманитарный университет
Опубликован: 13.07.2022 | Доступ: свободный | Студентов: 259 / 9 | Длительность: 11:54:00
Специальности: Программист
Лекция 3:

Представление графической информации

Положим v=\frac14AB=(x_v, y_v), u=(-y_v, x_v). Тогда радиус-векторы вершин ломаной находятся следующим образом:

OC = OA + v; OD = OC + u; OE = OD + v; OF = OC + v;
OG = OF - u; OH = OG + v; OI = OF + v. 

На рис. 3.34 показаны первые 2 итерации построения фигуры.

 Четверичный остров Коха, первые 2 итерации

Рис. 3.34. Четверичный остров Коха, первые 2 итерации

Пример 30. Рассмотрим фрактал, который называется кривой Гильберта. Кривая Гильберта представляет собой непрерывную кривую, которая полностью заполняет квадрат. Она являет

Кривая Гильберта, первые 4 итерации

Рис. 3.35. Кривая Гильберта, первые 4 итерации

Построим векторное представление ломаной f_n на шаге итерации n, для n = 0, 1, 2, \dots

Пусть M - точка и v_1, v_2, \dots - векторы. Обозначим через Mv_1, v_2, \dots, v_n ломаную, первой вершиной которой является точка M, следующая вершина является концом вектора v_1, отложенного от точки M, третьей вершиной является конец вектора v_2, отложенного от второй вершины ломаной, и так далее.

Ломаную f_n можно построить с помощью последовательности векторов, параллельных сторонам квадрата и имеющих одинаковую длину. Пусть ABCD - квадрат (рис. 3.36). Положим a_0 = AD, b_0 = AB. На каждом шаге длина векторов, составляющих ломаную, уменьшается вдвое. Обозначим a_n=\frac12a_{n-q}, b_n=\frac12b_{n-1}, для n = 1, 2, \dots

 Построение кривой Гильберта

Рис. 3.36. Построение кривой Гильберта

Ломаная f_0 состоит из вершины A_0, являющейся серединой диагонали AC, и пустой последовательности векторов. Ломаная f_1 имеет вид A_1b_1, a_1, - b_1 (см. рис. 3.36), где точка A_1 - середина отрезка AA_0.

Ломаная f_2 выглядит следующим образом:

A_2a_2, b_2, - a_2, b_2, b_2, a_2, - b_2, a_2, b_2, a_2, - b_2, - b_2, - a_2, - b_2, a_2,

где точка A_2 является серединой отрезка AA_1.

Обозначим через y_k произвольную подпоследовательность векторов ломаной f_k. Через (- y_k ) обозначим последовательность векторов, которая получается из последовательности y_k заменой каждого вектора на противоположный к нему вектор. Далее, обозначим через g(y_k) последовательность векторов, которая получается из последовательности y_k одновременной заменой всех вхождений вектора a_k на вектор b_k, а вектора b_k - на вектор a_k. Кроме того, обозначим через inc(y_k) последовательность векторов, которая отличается от последовательности y_k заменой всех индексов на k + 1.

Пусть теперь x_n - последовательность векторов ломаной f_n. Имеем:

x_0 - пустая последовательность;

x_n = g(inc(x_{n - 1})), b_n, inc(x_n - 1}), a_n, inc(x_{n - 1}), - b_n, - g(inc(x_n - 1)),

для n = 1, 2, \dots

Обозначим через A_n точку, от которой откладывается последовательность векторов x_n, для n = 1, 2, \dots Очевидно, что точки A_0, A_1, \dots лежат на диагонали AC квадрата (см. рис. 3.36) и удовлетворяют соотношениям:

OA_0=\frac12(OA+OC);\\
 OA_n=\frac12(OA+OA_{n-1}),

для n = 1, 2, \dots

Множество Мандельброта

Рассмотрим фрактал множество Мандельброта (рис. 3.37).

 Множество Мандельброта

Рис. 3.37. Множество Мандельброта

Пусть \mathbb {C} - множество комплексных чисел и D - множество точек квадрата [- 2; 2] x [- 2; 2], так что

D = \{c | c \in \mathbb {C}, - 2 \le \Re c \le2, - 2 \leIm c \le2\}.

Для каждой точки c из множества D рассмотрим отображение f_c: \mathbb {C} \to \mathbb {C}, такое что f_c(z) = z^2 + c. Множество Мандельброта состоит из таких точек c множества D, для которых траектория точки 0 при отображении f_c не выходит за пределы круга радиуса 2, т. е. для каждой точки z множества

\{0, f_c(0), f_c(f_c(0)), f_c(f_c(f_c(0))), \dots\}

выполняется условие: | z | < 2. Указанное множество представляет собой последовательность точек z_0, z_1, z_2, \dots, таких что

z_0=0, z_n=z_{n-1}^2+c,

для n = 1, 2, \dots

Положим z_n = x_n + iy_n, для n = 0, 1, 2, \dots, и c = x + iy. Тогда из данного соотношения будем иметь:

x_n=x_{n-1}^2-y_{n-1}^2+x, y_n = 2x_{n-1} y_{n-1}+y,

для n = 1, 2, \dots

Нулевая итерация соответствует множеству D. После первой итерации остаются точки, лежащие в круге радиуса 2, т. е. такие точки c, что | c | < 2, или x^2 + y^2 < 4. После второй итерации остаются точки c, для которых выполняется условие | c^2 + c | < 2 (рис. 3.38), и т. д.

 Множество Мандельброта, 512 итераций

Рис. 3.38. Множество Мандельброта, 512 итераций

На рис. 3.38 черным цветом выделено множество точек, которые остаются в круге радиуса 2 после 512 итераций. Точки, которые выходят за пределы этого круга на разных шагах итерации, отличаются цветом.