Фрактальная графика

Фрактал (лат. fractus — дробленый) — геометрическая фигура, обладающая свойством самоподобия, то есть составленная из нескольких частей, каждая из которых подобна всей фигуре целиком. Щелкните мышью

Понятия фрактал и фрактальная геометрия были предложены Бенуа Мандельбротом в 1975 году для обозначения нерегулярных, но самоподобных структур, которыми он занимался. Рождение фрактальной геометрии принято связывать с выходом в 1977 году книги Мандельброта «The Fractal Geometry of Nature». В его работах использованы научные результаты других ученых, работавших в период 1875-1925 годов в той же области (Пуанкаре, Фату, Жюлиа, Кантор, Хаусдорф). Но только в наше время удалось объединить их работы в единую систему.

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

Определение фрактала, данное Мандельбротом, звучит так: «Фракталом называется структура, состоящая из частей, которые в каком-то смысле подобны целому».

Применение фракталов

Классификация фракталов:

Примеры фракталов

Пример 1. Треугольник Серпинского

Алгоритм построения треугольника Серпинского:

  1. В основной программе строится внешний треугольник.
  2. В подпрограмме строится треугольник, получающийся при соединении середин сторон внешнего треугольника.
  3. Вызов рекурсивной подпрограммы для трех полученных треугольников (центральный треугольник исключаем).

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.
uses GraphABC;

var n: integer;

procedure TRI(x1, y1, x2, y2, x3, y3, n: integer);
var x12, y12, x23, y23, x31, y31: integer;
begin
  If n > 0 then
  begin
    x12 := (x1 + x2) div 2;  y12 := (y1 + y2) div 2;
    x23 := (x2 + x3) div 2;  y23 := (y2 + y3) div 2;
    x31 := (x3 + x1) div 2;  y31 := (y3 + y1) div 2;
    MoveTo(x31, y31);
    LineTo(x12, y12);
    LineTo(x23, y23);
    LineTo(x31, y31);
    FloodFill(x23, y23-3, clwhite);
    TRI(x31, y31, x23, y23, x3, y3, n - 1);
    TRI(x12, y12, x2, y2, x23, y23, n - 1);
    TRI(x1, y1, x12, y12, x31, y31, n - 1)
  end;
end;

begin
  write('n=');  readln(n);
  MoveTo(320, 0);
  LineTo(640, 480);
  LineTo(0, 480);
  LineTo(320, 0);
  FloodFill(320, 3, clgreen);
  TRI(320, 0, 640, 480, 0, 480, n);
end.

Пример 2. Красная водоросль

Алгоритм построения красной водоросли:

  1. В основной программе вызываем подпрограмму, в качестве параметров передаются координаты начала отрезка (точки А), длина отрезка и угол наклона.
  2. В подпрограмме строим отрезок АВ (ствол водоросли), вычисляем координаты конца отрезка (точки В).
  3. Вызываем рекурсивную подпрограмму, чтобы построить три отрезка: ветвь (расположенную под тем же углом, что и ствол, но меньшей длины) и две короткие ветви, расположенные по разные стороны от данной.

Данная программа позволяет рисовать изображение в зависимости от введённого пользователем n уровней.

Фрактал состоит из сочетания линий, координаты начала и конца определяются процедурой
Line(x, y, Round(x + l * cos(u)), Round(y - l * sin(u))), l отвечает за длину ветви, u – за угол наклона.

uses GraphABC;

var n: integer;

procedure Draw(x, y: integer; l, u: real; n: integer);
begin
  if n > 0 then
  begin
    Line(x, y, round(x + l * cos(u)), round(y - l * sin(u)));
    x := round(x + l * cos(u));
    y := round(y - l * sin(u));
    Draw(x, y, l * 0.4, u - Pi / 4, n - 1);
    Draw(x, y, l * 0.4, u + Pi / 4, n - 1);
    Draw(x, y, l * 0.7, u, n - 1);
  end;
end;

begin
  write('n=');  readln(n);
  SetPenColor(clred);
  Draw(320, 460, 140, Pi / 2, n);
end.

Задания

Номер вариантаЗадание
1Напишите программу, позволяющую построить фрактал Ковер Серпинского в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения треугольника Серпинского.
2Напишите программу, позволяющую построить фрактал Кладбище Серпинского в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения треугольника Серпинского.
3Напишите программу, позволяющую построить фрактал Дерево в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения красной водоросли.
4Напишите программу, позволяющую построить фрактал Дерево в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения красной водоросли.
5Напишите программу, позволяющую построить фрактал Прямоугольники в зависимости от введённого пользователем n уровней.
6Напишите программу, позволяющую построить фрактал Дерево в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения красной водоросли.
7Напишите программу, позволяющую построить фрактал Дерево в зависимости от введённого пользователем n уровней. Возьмите за основу пример построения красной водоросли.