Экспериментальное моделирование собственных фракталов

Фрактальная графика на паскале.

Мною были понятия такие как :

 

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

Самоподобие, самоподобный объект — объект, в точности или приближённо совпадающий с частью себя самого (то есть целое имеет ту же форму, что и одна или более частей). Самоподобие есть характеристическое свойство фрактала. Многие объекты реального мира обладают свойством самоподобия.

Язык программирования Паскаль - язык программирования общего назначения. Один из наиболее известных языков программирования, используется для обучения программированию в школах, ССУЗах, ВУЗах, в дальнейшем он служит базой для ряда других языков.

 

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

 

Вообще фракталом называется предмет который обладает одним из указанных свойств:

· Обладает нетривиальной структурой на всех масштабах. В этом и есть отличие от регулярных фигур, таких как окружность или эллипс. Если мы рассмотрим небольшой фрагмент регулярной фигуры в крупном масштабе, то он будет похож на фрагмент прямой. Для фрактала увеличение масштаба не ведет к упрощению структуры, на всех шкалах мы увидим одинаково сложную картину.

· Является самоподобным или приближенно самоподобным.

· Обладает дробной метрической размерностью.

 

В основном фракталы классифицируют по трём видам:

 

· Алгебраические фракталы .

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

· Стохастические фракталы. 

 Алгебраические фракталы - это самая крупная группа фракталов, получившая название за использование алгебраических формул.

 

Геометрические фракталы. Это самый первый, ранний тип фракталов, с которых, по сути, и началась история фракталов. Фракталы этого класса самые наглядные, потому что в них сразу видна самоподобность. В двухмерном случае такие фракталы можно получить, задав некоторую ломаную, называемую генератором. За один шаг алгоритма каждый из отрезков, составляющих ломаную, заменяется на ломаную-генератор. В результате бесконечного повторения этой процедуры (а, точнее, при переходе к пределу) получается фрактальная кривая. При видимой сложности полученной кривой, её общий вид задается только формой генератора.

Стохастические фракталы. Типичный представитель данного класса фракталов "Плазма". Для ее построения возьмем прямоугольник и для каждого его угла определим цвет. Далее находим центральную точку прямоугольника и раскрашиваем ее в цвет равный среднему арифметическому цветов по углам прямоугольника плюс некоторое случайное число. Чем больше случайное число - тем более "рваным" будет рисунок. Если мы теперь скажем, что цвет точки это высота над уровнем моря - получим вместо плазмы - горный массив. Именно на этом принципе моделируются горы в большинстве программ.

Мною были построены и изучены следующие фрактальные объекты:

1. Дерево Пифагора

2. Ковер Серпинского

3. Фрактальное дерево

 

Рассмотрим их более подробно:

1. Дерево Пифагора

uses CRT, GraphABC;   Procedure Rect(x1, y1, l: Integer; a1: Real); Begin MoveTo(x1, y1); LineTo(x1 + Round(l * cos(a1)), y1 - Round(l * sin(a1))); LineTo(x1 + Round(l * sqrt(2) * cos(a1 + pi/4)), y1 - Round(l * sqrt(2) * sin(a1 + pi/4))); LineTo(x1 + Round(l * cos(a1 + pi/2)), y1 - Round(l * sin(a1 + pi/2))); LineTo(x1, y1) End;   Procedure Draw(x, y, l, a: Real); Begin If l > 4 Then Begin Rect(Round(x), Round(y), Round(l), a); Draw(x - l*sin(a), y - l * cos(a), l / sqrt(2), a + pi / 4); Draw( x - l * sin(a) + l / sqrt(2) * cos(a + pi/4), y - l * cos(a) - l / sqrt(2) * sin(a + pi/4), l / sqrt(2), a - pi/4) End End; Begin SetWindowCaption('Фракталы: Дерево Пифагора'); SetWindowSize(730,500); ClearWindow; Draw(280, 460, 100, 0); Repeat Until KeyPressed End.

 

2. Ковер Серпинского

 

Uses CRT, GraphABC; Const Z = 6; { Глубина фрактала } Var x1, y1, x2, y2, x3, y3: Real;   Procedure Serp(x1, y1, x2, y2: Real; n: Integer); Var x1n, y1n, x2n, y2n: Real; Begin If n > 0 Then Begin x1n := 2*x1/3 + x2 / 3; x2n := x1/3 + 2*x2 / 3; y1n := 2*y1/3 + y2 / 3; y2n := y1/3+2*y2 / 3; Rectangle(Round(x1n), Round(y1n), Round(x2n), Round(y2n)); Serp(x1, y1, x1n, y1n, n-1); Serp(x1n, y1, x2n, y1n, n-1); Serp(x2n, y1, x2, y1n, n-1); Serp(x1, y1n, x1n, y2n, n-1); Serp(x2n, y1n, x2, y2n, n-1); Serp(x1, y2n, x1n, y2, n-1); Serp(x1n, y2n, x2n, y2, n-1); Serp(x2n, y2n, x2, y2, n-1) End End; Begin SetWindowCaption('Фракталы: Ковер Серпинского'); SetWindowSize(500,500); ClearWindow; Rectangle(20, 20, 460, 460); Serp(20, 20, 460, 460, Z); Repeat Until Keypressed End.

 

3. Треугольник Серпинского

 

Uses CRT, GraphABC; Const Z = 7; { Глубина фрактала }   Procedure tr(x1, y1, x2, y2, x3, y3: Real); Begin Line(Round(x1), Round(y1), Round(x2), Round(y2)); Line(Round(x2), Round(y2), Round(x3), Round(y3)); Line(Round(x3), Round(y3), Round(x1), Round(y1)); End;   Procedure draw(x1, y1, x2, y2, x3, y3: Real; n: Integer); Var x1n, y1n, x2n, y2n, x3n, y3n : Real; Begin If n > 0 Then Begin x1n := (x1 + x2) / 2; y1n := (y1 + y2) / 2; x2n := (x2 + x3) / 2; y2n := (y2 + y3) / 2; x3n := (x3 + x1) / 2; y3n := (y3 + y1) / 2; tr(x1n, y1n, x2n, y2n, x3n, y3n); draw(x1, y1, x1n, y1n, x3n, y3n, n - 1); draw(x2, y2, x1n, y1n, x2n, y2n, n - 1); draw(x3, y3, x2n, y2n, x3n, y3n, n - 1) End End; Begin SetWindowCaption('Фракталы: Треугольник Серпинского'); SetWindowSize(650,500); ClearWindow; tr(320,10,600,470,40,470); draw(320,10,600,470,40,470,Z); Repeat Until KeyPressed End.

 

Экспериментальное моделирование собственных фракталов

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

 

uses crt, graphABC;

var n,i,x1,x2,x3,y1,y2,y3: integer;

begin

x1:=150;x2:=250;x3:=200;y1:=270;y2:=270;y3:=180;

setpenwidth(5);

for n:=1 to 16 do

begin

if (n mod 2 =0) then

begin

setpencolor(clred);

moveto(x1,y1);lineto(x2,y2);lineto(x3,y3);lineto(x1,y1)

end

else

begin

setpencolor(clgreen);

moveto(x1,y1);lineto(x2,y2);lineto(x3,y3);lineto(x1,y1);

end;

x1:=x1-8;x2:=x2+8;y1:=y1+4;y2:=y2+4;y3:=y3-8;

end;

end.

 

В процессе исследования проведена следующая работа:

- изучены понятия, «фрактал», «Самоподобие, самоподобный объект», «язык программирования».

- выявлены существующие приемы и способы программирования фракталов;

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

Следует отметить, что при проведении эксперимента выяснилось, что зная способы программирования фракталов, разбираясь в сути рекурсивных алгоритмов можно создать программы для построения собственных геометрических фракталов, а затем и многомерных поверхностей. Именно поэтому работу по изучению способов программирования следует продолжить, изучая при этом возможности других языков программирования и попытаться составить программы для построения многомерных поверхностей.

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

 


Дата добавления: 2019-01-14; просмотров: 586; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!