Виды фракталов в программировании
Оценка 4.9

Виды фракталов в программировании

Оценка 4.9
Семинары
doc
информатика
9 кл
25.10.2019
Виды фракталов в программировании
Научно-исследовательская работа по теме «Фракталы на языке программирования Паскаль АВС.NET» 1.ВВЕДЕНИЕ Актуальность: Данная работа возникла в связи с интересом к дисциплине Компьютерная графика, на которой мы узнали о таком новом для нас понятии «Фрактал». Тут же возникла попытка создать собственное самоподобное изображение. Что в дальнейшем привело к попыткам запрограммировать полученные изображения средствами изученного к тому времени языка программирования Pascal ABC. Результатом данного исследования стали программы, позволяющие строить фракталы, написанные на языке Pascal ABC и мною были предприняты попытки менять программу так, чтобы можно было программировать фрактал посредством цикличного построения самоподобных форм с использованием рекурсивных и не рекурсивных алгоритмов. Проблема: при исследовании существующих программ для построения фрактальных изображений возник вопрос о возможности написать программу таким образом, чтобы она позволяла строить фракталы через программирование самоподобных форм. Изучив данную проблему мы пришли к выводу, что известные знания о фракталах, способах их построения, посредством программирования на языке Pascal, используются во всем мире. Мы лишь попробуем повторить программы, созданные посредством рекурсивных и не рекурсивных алгоритмов, которые позволят нам получить известные самоподобные формы. 2. ОСНОВНОЕ СОДЕРЖАНИЕ. Цель: изучение возможностей применения рекурсивных и нерекурсивных алгоритмов при создании фрактальных изображений на языке программирования Pascal ABC. Задачи: - изучить понятия «фрактал», «самоподобие», «язык программирования», «рекурсия», «рекурсивный алгоритм», «рекурсивная программа»; -выявить сущность рекурсивных и нерекурсивных алгоритмов, приемы и способы программирования фракталов; - провести экспериментальное программирование - изменение глубины рекурсии и других параметров для построения собственных фракталов, используя изученные способы; Гипотеза: Зная способы программирования фракталов, разбираясь в сути рекурсивных алгоритмов можно построить собственное фрактальное изображение. Методы исследования: Анализ, синтез, сравнение, эксперимент, моделирование, программирование. Результаты: - изучены понятия «фрактал», «самоподобие», «язык программирования», «рекурсия», «рекурсивный алгоритм», «рекурсивная программа»; - выявлены существующие приемы и способы программирования фракталов; - реализованы существующие программы для построения собственных фракталов, с использованием рекурсивных и не рекурсивных алгоритмов; Проблема: При составлении программ по созданию фракталов, выяснилось, что знаний в программировании недостаточно, что бы строить сложные цепочки фракталов, поэтому работу по изучению способов программирования фракталов следует продолжить, изучая при этом и возможности других языков программирования. ХОД РАБОТЫ: Мною изучены понятия: Фрактал – (лат. fractus — дроблёный, сломанный, разбитый) — математическое множество, обладающее свойством самоподобия, то есть однородности в различных шкалах измерения. Самоподобие, самоподобный объект — объект, в точности или приближённо совпадающий с частью себя самого (то есть целое имеет ту же форму, что и одна или более частей). Самоподобие есть характеристическое свойство фрактала. Многие объекты реального мира обладают свойством самоподобия. Язык программирования Паскаль - язык программирования общего назначения. Один из наиболее известных языков программирования, используется для обучения программированию в школах, ССУЗах, ВУЗах, в дальнейшем он служит базой для ряда других языков. Рекурсия – в определении, описании, изображении какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Глубина рекурсии. В программировании рекурсия — вызов функции из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция А вызывает функцию В , а функция В — функцию А. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. Рекурсивный алгоритм. Рекурсивная программа. Рекурсивная программа позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причём без явных повторений частей программы и использования циклов. Чтобы вычисления не происходили бесконечно, необходимо наличие условия завершения, позволяющее программе прекратить вызывать себя. В программировании рекурсию можно определить как сведение какой-то задачи к такой же, но использующей более простые данные. Вывод: таким образом, рекурсивная программа должна иметь как минимум два пути выполнения, один из которых предполагает рекурсивный вызов (случай «сложных» данных), а второй – без рекурсивного вызова (случай «простых» данных). Рекурсивную программу всегда можно преобразовать в нерекурсивную (итеративную, использующую циклы), которая выполняет те же вычисления. И наоборот, используя рекурсию, любое вычисление, предполагающее использование циклов, можно реализовать, не прибегая к циклам. Мною были построены и изучены следующие фрактальные объекты: 1. Дерево Пифагора 2. Ковер Серпинского 3. Множество Мандельброта 4. Треугольник Серпинского 5. Фрактальное дерево Рассмотрим их более подробно: 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. Это также дерево Пифагора: uses GraphABC; const max = 3; procedure LineTo1(x, y : Integer; l, u : Real); begin Line(x, y, Round(x + l * cos(u)), Round(y - l * sin(u))); end; procedure Draw(x, y : Integer; l, u : real); begin if l > max then begin l := l * 0.7; LineTo1(x, y, l, u); x := Round(x + l * cos(u)); y := Round(y - l * sin(u)); Draw(x, y, l, u + pi / 4); {Угол поворота 1} Draw(x, y, l, u - pi / 6); {Угол поворота 2} end; end; begin SetWindowCaption('Фракталы: Дерево Пифагора'); SetWindowSize(730,500); ClearWindow; Draw(320, 460, 200, pi/2) 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 GraphABC; const n=255; max=10; var x,y,x1,y1,cx,cy: real; i,ix,iy: integer; // z=z^2+c begin SetWindowSize(1000,800); SetWindowCaption('Фрактал: множество Манлеььброта'); for ix:=0 to WindowWidth-1 do for iy:=0 to WindowHeight-1 do begin x:=0; y:=0; cx:=0.002*(ix-720); cy:=0.002*(iy-150); for i:=2 to n do begin x1:=x*x-y*y+cx; y1:=2*x*y+cy; if (x1>max) or (y1>max) then break; x:=x1; y:=y1; end; if i>=n then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; end. 4. Треугольник Серпинского 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. 5. Фрактальное дерево Uses GraphABC; Procedure Tree(x, y: Integer; a: Real; l: Integer); Var x1, y1: Integer; p, s : Integer; i : Integer; a1 : Real; Begin If l < 8 Then exit; x1 := Round(x + l*cos(a)); y1 := Round(y + l*sin(a)); If l > 100 Then p := 100 Else p := l; If p < 40 Then Begin {Генерация листьев} If Random > 0.5 Then SetPenColor(clLime) Else SetPenColor(clGreen); For i := 0 To 3 Do Line(x + i, y, x1, y1) End Else Begin {Генерация веток} SetPenColor(clBrown); For i := 0 To (p div 6) Do Line(x + i - (p div 12), y, x1, y1) End; {Следующие ветки} For i := 0 To 9 - Random(9) Do Begin s := Random(l - l div 6) + (l div 6); a1 := a + 1.6 * (0.5 - Random); {Угол наклона веток} x1 := Round(x + s * cos(a)); y1 := Round(y + s * sin(a)); Tree(x1, y1, a1, p - 5 - Random(30)) {Чем меньше вычитаем, тем пышнее дерево} End End; {Основная программа} Begin SetWindowCaption('Фрактальное дерево'); SetWindowSize(700,600); Randomize; Tree(350, 580, 3*pi/2, 200) 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. ЗАКЛЮЧЕНИЕ В процессе исследования проведена следующая работа: - изучены понятия, «фрактал», «самоподобие», «язык программирования», «рекурсия», «рекурсивный алгоритм», «рекурсивная программа»; - выявлены существующие приемы и способы программирования фракталов; - проанализированы программы для построения фракталов, с использованием изученных способов; Следует отметить, что при проведении эксперимента выяснилось, что зная способы программирования фракталов, разбираясь в сути рекурсивных алгоритмов можно создать программы для построения собственных геометрических фракталов, а затем и многомерных поверхностей. Именно поэтому работу по изучению способов программирования следует продолжить, изучая при этом возможности других языков программирования и попытаться составить программы для построения многомерных поверхностей. Практическое применение данного вопроса подразумевает возможность создания средствами программирования живых моделей любых фрактальных объектов на основе составления программ для самоподобных форм. БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Википедия. – (http://wikipedia.org/wiki ) 2. Способы построения фракталов. – ( http://sworm.narod.ru/ ) 3. Фракталы на языке PascalABC http://fraktalsworld.blogspot.ru/p/blog-page_25.htm 4. Фракталы в программировании http://ru.wikipedia.org/wiki/ 5. Формулы построения фракталов http://pascal.proweb.kz/index.php?page=92 6. Шредер М. Фракталы, хаос, степенные законы / Шредер М.- М., «Просвещение», 2001 г., 528с.
Программирование фракталов. Мараник Л.В..doc
Научно­исследовательская работа по теме  «Фракталы  на языке программирования  Паскаль АВС.NET» 1.ВВЕДЕНИЕ Актуальность:  Данная   работа   возникла   в   связи   с   интересом   к   дисциплине Компьютерная графика, на которой мы узнали о таком новом для нас понятии «Фрактал». Тут же   возникла   попытка   создать   собственное   самоподобное   изображение.   Что   в   дальнейшем привело к попыткам запрограммировать полученные изображения средствами изученного к тому времени языка программирования Pascal ABC. Результатом   данного   исследования   стали   программы,   позволяющие   строить фракталы,   написанные   на   языке   Pascal   ABC   и   мною   были   предприняты   попытки   менять программу   так,   чтобы   можно   было   программировать     фрактал   посредством   цикличного построения   самоподобных   форм   с   использованием   рекурсивных   и   не   рекурсивных алгоритмов. Проблема:  при  исследовании   существующих     программ   для   построения фрактальных изображений возник вопрос о возможности написать программу таким образом, чтобы она позволяла строить  фракталы через программирование  самоподобных форм. Изучив данную проблему мы пришли к выводу,  что известные знания о фракталах, способах их построения, посредством программирования на языке  Pascal, используются во всем мире. Мы лишь попробуем повторить программы, созданные  посредством рекурсивных и   не   рекурсивных   алгоритмов,   которые   позволят   нам   получить   известные   самоподобные формы.  2 2. ОСНОВНОЕ СОДЕРЖАНИЕ. Цель: изучение возможностей применения   рекурсивных и нерекурсивных алгоритмов при создании фрактальных изображений на языке программирования Pascal ABC. Задачи:  ­   изучить   понятия   «фрактал»,   «самоподобие»,   «язык   программирования», «рекурсия», «рекурсивный алгоритм», «рекурсивная программа»;  ­выявить   сущность   рекурсивных   и   нерекурсивных   алгоритмов,   приемы   и   способы программирования  фракталов; ­ провести экспериментальное программирование   ­ изменение глубины рекурсии и других параметров  для построения собственных фракталов, используя изученные способы; Гипотеза:   Зная   способы   программирования     фракталов,   разбираясь   в   сути   рекурсивных   алгоритмов можно построить собственное фрактальное изображение.  Методы исследования: Анализ, синтез, сравнение, эксперимент, моделирование, программирование. Результаты:    ­ изучены понятия  «фрактал», «самоподобие», «язык программирования», «рекурсия»,  «рекурсивный алгоритм», «рекурсивная программа»;  ­  выявлены существующие приемы и способы программирования  фракталов; ­ реализованы существующие  программы  для построения собственных фракталов, с  использованием рекурсивных и не рекурсивных алгоритмов; Проблема:  При   составлении     программ     по   созданию   фракталов,   выяснилось,   что   знаний   в программировании   недостаточно,   что   бы   строить   сложные   цепочки   фракталов,     поэтому работу по изучению способов программирования фракталов следует продолжить, изучая при этом и возможности других языков программирования. 3 ХОД РАБОТЫ: Мною изучены понятия: Фрактал –  (лат. fractus — дроблёный, сломанный, разбитый) — математическое множество, обладающее свойством самоподобия, то есть однородности в различных шкалах измерения.  Самоподобие, самоподобный объект — объект, в точности или приближённо совпадающий  с частью себя самого (то есть целое имеет ту же форму, что и одна или более частей).  Самоподобие есть характеристическое свойство фрактала. Многие объекты реального мира  обладают свойством самоподобия. Язык программирования Паскаль ­  язык программирования общего назначения. Один из наиболее   известных   языков   программирования,   используется   для   обучения программированию   в   школах,   ССУЗах,   ВУЗах,   в   дальнейшем   он   служит   базой   для   ряда других языков. Рекурсия – в определении, описании, изображении какого­либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.  Глубина   рекурсии.  В программировании рекурсия —   вызов функции   из   неё   же   самой, непосредственно   (простая  рекурсия)  или  через   другие   функции   (сложная или косвенная рекурсия),   например,   функция   А  вызывает   функцию   В ,   а   функция   В —   функцию А. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.  Рекурсивный   алгоритм.   Рекурсивная   программа.  Рекурсивная   программа   позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причём без явных повторений частей программы и использования циклов.  Чтобы вычисления не происходили бесконечно, необходимо наличие условия завершения, позволяющее программе прекратить вызывать себя. В   программировании рекурсию можно   определить как сведение какой­то задачи к такой же, но использующей более простые данные.  Вывод:   таким   образом,   рекурсивная   программа   должна   иметь   как   минимум   два   пути выполнения, один из которых предполагает рекурсивный вызов (случай «сложных» данных), а второй – без рекурсивного вызова (случай «простых» данных). Рекурсивную программу всегда можно преобразовать в нерекурсивную (итеративную, использующую   циклы),   которая   выполняет   те   же   вычисления.  И   наоборот,   используя рекурсию, любое вычисление, предполагающее использование циклов, можно реализовать, не прибегая к циклам. 4 5 Мною были построены и изучены следующие фрактальные объекты: 1. Дерево Пифагора 2. Ковер Серпинского 3. Множество Мандельброта 4. Треугольник Серпинского 5. Фрактальное дерево  Рассмотрим их более подробно: 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. 6 Это также дерево Пифагора: uses GraphABC; const     max = 3; procedure LineTo1(x, y : Integer; l, u : Real); begin     Line(x, y, Round(x + l * cos(u)), Round(y ­ l * sin(u))); end; procedure Draw(x, y : Integer; l, u : real); begin     if l > max then     begin         l := l * 0.7;         LineTo1(x, y, l, u);         x := Round(x + l * cos(u));         y := Round(y ­ l * sin(u));         Draw(x, y, l, u + pi / 4); {Угол поворота 1}         Draw(x, y, l, u ­ pi / 6); {Угол поворота 2}     end; end; begin    SetWindowCaption('Фракталы: Дерево Пифагора');    SetWindowSize(730,500);    ClearWindow;    Draw(320, 460, 200, pi/2) end. 7 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. 8 3. Множество Мандельброта uses GraphABC; const   n=255;   max=10; var   x,y,x1,y1,cx,cy: real;   i,ix,iy: integer; // z=z^2+c begin   SetWindowSize(1000,800);   SetWindowCaption('Фрактал: множество Манлеььброта');   for ix:=0 to WindowWidth­1 do   for iy:=0 to WindowHeight­1 do   begin     x:=0;     y:=0;     cx:=0.002*(ix­720);     cy:=0.002*(iy­150);     for i:=2 to n do     begin       x1:=x*x­y*y+cx;       y1:=2*x*y+cy;       if (x1>max) or (y1>max) then break;       x:=x1;       y:=y1;     end;     if i>=n then SetPixel(ix,iy,clRed)       else SetPixel(ix,iy,RGB(255,255­i,255­i));   end; end. 9 4. Треугольник Серпинского 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. 10 5. Фрактальное дерево  Uses GraphABC; Procedure Tree(x, y: Integer; a: Real; l: Integer); Var    x1, y1: Integer;    p, s : Integer;   i : Integer;    a1 : Real; Begin      If l < 8 Then     exit;      x1 := Round(x + l*cos(a));      y1 := Round(y + l*sin(a));      If l > 100 Then p := 100 Else p := l;      If p < 40 Then      Begin           {Генерация листьев}           If Random > 0.5 Then SetPenColor(clLime) Else SetPenColor(clGreen);           For i := 0 To 3 Do               Line(x + i, y, x1, y1)      End      Else      Begin           {Генерация веток}           SetPenColor(clBrown);           For i := 0 To (p div 6) Do               Line(x + i ­ (p div 12), y, x1, y1)      End;      {Следующие ветки}      For i := 0 To 9 ­ Random(9) Do      Begin           s := Random(l ­ l div 6) + (l div 6);           a1 := a + 1.6 * (0.5 ­ Random); {Угол наклона веток}           x1 := Round(x + s * cos(a));           y1 := Round(y + s * sin(a));           Tree(x1, y1, a1, p ­ 5 ­ Random(30)) {Чем меньше вычитаем, тем пышнее дерево}      End End; {Основная программа} Begin   SetWindowCaption('Фрактальное дерево');   SetWindowSize(700,600);   Randomize;   Tree(350, 580, 3*pi/2, 200) End. 11 Экспериментальное моделирование собственных фракталов В   своих   исследованиях   я   пытался,   используя   разработанные   алгоритмы модифицировать   фрактальные   изображения   и   построить   свои   фракталы.   В   предложенной работе   мной   выполнено   программирование   своего   изображения   фрактала   на   языке программирования 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. 12 ЗАКЛЮЧЕНИЕ В процессе исследования проведена следующая работа: ­   изучены   понятия,   «фрактал»,   «самоподобие»,   «язык   программирования»,     «рекурсия», «рекурсивный алгоритм», «рекурсивная программа»;   ­  выявлены существующие приемы и способы программирования  фракталов; ­ проанализированы   программы   для построения фракталов, с использованием изученных способов; Следует отметить, что при   проведении эксперимента выяснилось, что зная способы программирования   фракталов, разбираясь в сути рекурсивных алгоритмов можно создать программы для построения собственных геометрических фракталов, а затем и многомерных поверхностей.   Именно   поэтому   работу   по   изучению   способов   программирования   следует продолжить, изучая при этом возможности других языков программирования и попытаться составить программы для построения многомерных поверхностей. Практическое   применение   данного   вопроса   подразумевает   возможность   создания средствами   программирования   живых   моделей   любых   фрактальных   объектов   на   основе составления программ для самоподобных форм. 13 14 БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Википедия. – (http     ://   wikipedia  .  org   /  wiki ) 2. Способы построения фракталов. – ( http://sworm.narod.ru/ )  3. Фракталы на языке PascalABC http://fraktalsworld.blogspot.ru/p/blog­page_25.htm   4. Фракталы в программировании http://ru.wikipedia.org/wiki/  5. Формулы построения фракталов http://pascal.proweb.kz/index.php?page=92   6. Шредер М. Фракталы, хаос, степенные законы / Шредер М.­ М., «Просвещение», 2001  г., 528с. 15

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

Виды фракталов в программировании

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