Реферат Теория фракталов. Фракталы в природе.
Оглавление
TOC \o "1-3" \h \z \u Введение PAGEREF _Toc284324275 \h 2Кто придумал "фрактал"? PAGEREF _Toc284324278 \h 3Красота фракталов PAGEREF _Toc284324279 \h 3ПОНЯТИЕ "ФРАКТАЛ" PAGEREF _Toc284324280 \h 4Применение фракталов PAGEREF _Toc284324281 \h 4Размерность фракталов. PAGEREF _Toc284324282 \h 6Типы фракталов PAGEREF _Toc284324283 \h 8Геометрические фракталы PAGEREF _Toc284324284 \h 8Снежинка Коха PAGEREF _Toc284324285 \h 8Треугольник Серпинского PAGEREF _Toc284324286 \h 9Драконова ломаная PAGEREF _Toc284324287 \h 9Алгебраические фракталы PAGEREF _Toc284324288 \h 10Стохастические фракталы PAGEREF _Toc284324289 \h 11Программирование фракталов PAGEREF _Toc284324290 \h 11L-системы PAGEREF _Toc284324291 \h 11Построения геометрических фракталов на Pascal ABC. PAGEREF _Toc284324292 \h 13ЗАКЛЮЧЕНИЕ PAGEREF _Toc284324293 \h 35
ВведениеРазветвления трубочек трахей, листья на деревьях, вены в руке, река, бурлящая и изгибающаяся, рынок ценных бумаг - это все фракталы. От представителей древних цивилизаций до Майкла Джексона, ученые, математики и артисты, как и все остальные обитатели этой планеты, были зачарованы фракталами и применяли их в своей работе.Программисты и специалисты в области компьютерной техники так же без ума от фракталов, так как фракталы бесконечной сложности и красоты могут быть сгенерированы простыми формулами на простых домашних компьютерах. Открытие фракталов было открытием новой эстетики искусства, науки и математики, а так же революцией в человеческом восприятии мира.Цели:
1. Познакомиться с новыми областями науки. Продемонстрировать связь таких наук как геометрия, алгебра и информатика.2. Познакомиться с принципами построения геометрических фракталов.
Задачи:
Создать программы на языке ABCPascal для демонстрации фракталов.
Кто придумал "фрактал"?571518097500Первые идеи фрактальной геометрии возникли в 19 веке. Кантор с помощью простой рекурсивной (повторяющейся) процедуры превратил линию в набор несвязанных точек (так называемая Пыль Кантора). Он брал линию и удалял центральную треть и после этого повторял то же самое с оставшимися отрезками. Пеано нарисовал особый вид линии (рисунок №1). Для ее рисования Пеано использовал следующий алгоритм.
На первом шаге он брал прямую линию и заменял ее на 9 отрезков длинной в 3 раза меньшей, чем длинна исходной линии (Часть 1 и 2 рисунка 1). Далее он делал то же самое с каждым отрезком получившейся линии. И так до бесконечности. Ее уникальность в том, что она заполняет всю плоскость. Доказано, что для каждой точки на плоскости можно найти точку, принадлежащую линии Пеано. Кривая Пеано и пыль Кантора выходили за рамки обычных геометрических объектов. Они не имели четкой размерности. Пыль Кантора строилась вроде бы на основании одномерной прямой, но состояла из точек (размерность 0). А кривая Пеано строилась на основании одномерной линии, а в результате получалась плоскость. Вплоть до 20 века шло накопление данных о таких странных объектах, без какой либо попытки их систематизировать. Так было, пока за них не взялся Бенуа Р. Мандельброт (Benoit Mandelbrot), математик из Исследовательского центра им. Томаса Уотстона при IBM - отец современной фрактальной геометрии, который и предложил термин "фрактал" для описания объектов, структура которых повторяется при переходе к все более мелким масштабам.. Работая в IBM математическим аналитиком, он изучал шумы в электронных схемах, которые невозможно было описать с помощью статистики. Постепенно сопоставив факты, он пришел к открытию нового направления в математике - фрактальной геометрии.
Красота фракталовПочему же фракталы так красивы? Так сказочно, обворожительно, волнующе (какие еще есть эпитеты?) красивы. Математика вся пронизана красотой и гармонией, только эту красоту надо увидеть. Вот как пишет сам Мандельброт в своей книге "The Fractal Geometry of Nature"
"Почему геометрию часто называют холодной и сухой? Одна из причин лежит в ее неспособности описать форму облаков, гор или деревьев. Облака - это не сферы, горы - не углы, линия побережья - не окружность, кора не гладкая, а молния не прямая линия..."ПОНЯТИЕ "ФРАКТАЛ"Понятия фрактал и фрактальная геометрия, появившиеся в конце 70-х, с середины 80-х прочно вошли в обиход математиков и программистов. Слово фрактал образовано от латинского fractus и в переводе означает состоящий из фрагментов. Оно было предложено Бенуа Мандельбротом в 1975 году для обозначения нерегулярных, но самоподобных структур, которыми он занимался. Рождение фрактальной геометрии принято связывать с выходом в 1977 году книги Мандельброта `The Fractal Geometry of Nature. В его работах использованы научные результаты других ученых, работавших в период 1875-1925 годов в той же области (Пуанкаре, Фату, Жюлиа, Кантор, Хаусдорф). Но только в наше время удалось объединить их работы в единую систему.
Роль фракталов в машинной графике сегодня достаточно велика. Они приходят на помощь, например, когда требуется, с помощью нескольких коэффициентов, задать линии и поверхности очень сложной формы. С точки зрения машинной графики, фрактальная геометрия незаменима при генерации искусственных облаков, гор, поверхности моря. Фактически найден способ легкого представления сложных неевклидовых объектов, образы которых весьма похожи на природные.
Одним из основных свойств фракталов является самоподобие. В самом простом случае небольшая часть фрактала содержит информацию о всем фрактале.
Фракталы находят все большее и большее применение в науке. Основная причина этого заключается в том, что они описывают реальный мир иногда даже лучше, чем традиционная физика или математика. Вот несколько примеров:
Применение фракталовКомпьютерные системы.
Наиболее полезным использованием фракталов в компьютерной науке является фрактальное сжатие данных. В основе этого вида сжатия лежит тот факт, что реальный мир хорошо описывается фрактальной геометрией. При этом, картинки сжимаются гораздо лучше, чем это делается обычными методами (такими как jpeg или gif). Другое преимущество фрактального сжатия в том, что при увеличении картинки, не наблюдается эффекта пикселизации (увеличения размеров точек до размеров, искажающих изображение). При фрактальном же сжатии, после увеличения, картинка часто выглядит даже лучше, чем до него.
Механика жидкостей.
Изучение турбулентности в потоках очень хорошо подстраивается под фракталы. Турбулентные потоки хаотичны и поэтому их сложно точно смоделировать. И здесь помогает переход к из фрактальному представлению, что сильно облегчает работу инженерам и физикам, позволяя им лучше понять динамику сложныхИзучение турбулентности в потоках очень хорошо подстраивается под фракталы. Турбулентные потоки хаотичны и поэтому их сложно точно смоделировать. И здесь помогает переход к из фрактальному представлению, что сильно облегчает работу инженерам и физикам, позволяя им лучше понять динамику сложных потоков.При помощи фракталов также можно смоделировать языки пламени.
Пористые материалы хорошо представляются в фрактальной форме в связи с тем, что они имеют очень сложную геометрию. Это используется в нефтяной науке.
Телекоммуникации.
Для передачи данных на расстояния используются антенны, имеющие фрактальные формы, что сильно уменьшает их размеры и вес.
Использование фрактальной геометрии при проектировании антенных устройств было впервые применено американским инженером Натаном Коэном, который жил тогда в центре Бостона, где была запрещена установка на зданиях внешних антенн. Коэн вырезал из алюминиевой фольги фигуру в форме кривой Коха и затем наклеил ее на лист бумаги, а затем присоединил к приемнику. Оказалось, что такая антенна работает не хуже обычной. И хотя физические принципы такой антенны не изучены до сих пор, это не помешало Коэну обосновать собственную компанию и наладить их серийный выпуск. В данный момент американская фирма “Fractal Antenna System”разработала антенну нового типа. Теперь можно отказаться от использования в мобильных телефонах торчащих наружных антенн. Так называемая фрактальная антенна располагается прямо на основной плате внутри аппарата.
Физика поверхностей.
Фракталы используются для описания кривизны поверхностей. Неровная поверхность характеризуется комбинацией из двух разных фракталов.
Медицина.
1. Биосенсорные взаимодействия
2. Биения сердца
Биология.
Моделирование хаотических процессов, в частности при описании моделей популяций.
Размерность фракталов.Одной из идей, выросших из открытия фрактальной геометрии, была идея нецелых значений для количества изменений в пространстве. Мы знаем, что Евклидова геометрия изучает фигуры с размерностью 1, 2, 3 (длина, ширина, высота). Фигуры с размерностью 1- это отрезок, с размерностью 2- фигура на плоскости (например, квадрат, трапеция, треугольник), 3- геометрические тела (например, куб, шар, пирамида и т.д.)Одним из основных свойств фракталов является самоподобие. В самом простом случае небольшая часть фрактала содержит информацию о самом фрактале.
Если смотреть с математической точки зрения, то размерность определяется следующим образом.
Для одномерных объектов - увеличение в 2 раза линейных размеров приводит к увеличению размеров (в данном случае длины) в 2 раза, т.е. в 21.
Для двухмерных объектов увеличение в 2 раза линейных размеров приводит к увеличению размера (площади) в 4 раза, т.е. в 22. Приведем пример. Дан круг радиуса r, тогда S= π r2.
Если увеличить в 2 раза радиус, то: S1 = π(2r2 ); S1= 4πr2 .
Для трехмерных объектов увеличение в 2 раза линейных размеров приводит к увеличению объема в 8 раз, т.е. 23.
Если мы возьмем куб, то V=а3, V'=(2а)3=8а; V'/V= 8.
Однако природа не всегда подчиняется этим законам. Попробуем рассмотреть размерность фрактальных объектов на простом примере.
Представим себе, что муха хочет сесть на клубок шерсти. Когда она смотрит на него издалека, то видит только точку, размерность которой 0. Подлетая ближе, она видит сначала круг, его размерность 2, а затем шар – размерность 3. Когда муха сядет на клубок, она шара уже не увидит, а рассмотрит ворсинки, нитки, пустоты, т.е. объект с дробной размерностью.
Размерность объекта (показатель степени) показывает, по какому закону растет его внутренняя область. Аналогичным образом с ростом размера возрастает «объем фрактала». Ученые пришли к выводу, что фрактал - это множество с дробной размерностью.
Типы фракталовФракталы делятся на группы. Самые большие группы это:
геометрические фракталы
алгебраические фракталы
системы итерируемых функций
стохастические фракталыГеометрические фракталыИменно с них и начиналась история фракталов. Этот тип фракталов получается путем простых геометрических построений. Обычно при построении этих фракталов поступают так: берется "затравка" - аксиома - набор отрезков, на основании которых будет строиться фрактал. Далее к этой "затравке" применяют набор правил, который преобразует ее в какую-либо геометрическую фигуру. Далее к каждой части этой фигуры применяют опять тот же набор правил. С каждым шагом фигура будет становиться все сложнее и сложнее, и если мы проведем (по крайней мере, в уме) бесконечное количество преобразований - получим геометрический фрактал.
Рассмотренная выше кривая Пеано является геометрическим фракталом. Классические примеры геометрических фракталов - Снежинка Коха, Лист, Треугольник Серпинского).Снежинка Кохаleft000Из этих геометрических фракталов очень интересным и довольно знаменитым является первый - снежинка Коха. Строится она на основе равностороннего треугольника. Каждая линия которого ___ заменяется на 4 линии каждая длинной в 1/3 исходной _/\_. Таким образом, с каждой итерацией длинна кривой увеличивается на треть. И если мы сделаем бесконечное число итераций - получим фрактал - снежинку Коха бесконечной длинны. Получается, что наша бесконечная кривая покрывает ограниченную площадь. Попробуйте сделать то же самое методами и фигурами из евклидовой геометрии. Для построения геометрических фракталов хорошо приспособлены так называемые L-Systems. Суть этих систем состоит в том, что имеется определенных набор символов системы, каждый из которых обозначает определенное действие и набор правил преобразования символов. Треугольник Серпинскогоleft000Второе свойство фракталов - самоподобие. Возьмем, например, треугольник Серпинского. Для его построения из центра треугольника мысленно вырежем кусок треугольной формы, который своими вершинами будет упираться в середины сторон исходного треугольника. Повторим эту же процедуру для трех образовавшихся треугольников (за исключением центрального) и так до бесконечности. Если мы теперь возьмем любой из образовавшихся треугольников и увеличим его - получим точную копию целого. В данном случае мы имеем дело с полным самоподобием.Драконова ломанаяДраконова ломаная относится к классу самоподобных рекурсивно порождаемых геометрических структур. Ломаная нулевого порядка представляет собой просто прямой угол. Изображение фигуры каждого следующего порядка строится путем рекурсивных замен каждого из отрезков фигуры младшего порядка на два отрезка, сложенных также в виде прямого угла.
При этом каждый первый угол оказывается "вывернутым" наружу, а каждый второй - вовнутрь. Несмотря на внешнюю простоту, построение драконовой ломаной - увлекательная алгоритмическая задачка, решение которой может потребовать от вас определенных мыслительных усилий. 2517140317500Попробуйте "научить" ваш компьютер строить драконовы ломаные n - того порядка (естественно, в разумных пределах значений n). Это умственное упражнение будет способствовать оттачиванию вашего "боевого" искусства алгоритмизации и программирования. На рисунке проиллюстрирован алгоритм построения драконовой ломаной и изображен вполне взрослый "дракон" десятого порядка.
Алгебраические фракталыВторая большая группа фракталов - алгебраические. Свое название они получили за то, что их строят, на основе алгебраических формул иногда весьма простых. Методов получения алгебраических фракталов несколько. Один из методов представляет собой многократный (итерационный) расчет функции Zn+1=f(Zn), где Z - комплексное число, а f некая функция. Расчет данной функции продолжается до выполнения определенного условия. И когда это условие выполнится - на экран выводится точка. При этом значения функции для разных точек комплексной плоскости может иметь разное поведение:
С течением времени стремится к бесконечности. Стремится к 0 Принимает несколько фиксированных значений и не выходит за их пределы. Поведение хаотично, без каких либо тенденций.Чтобы проиллюстрировать алгебраические фракталы обратимся к классике - множеству Мандельброта.
Для его построения нам необходимы комплексные числа. Комплексное число - это число, состоящее из двух частей - действительной и мнимой, и обозначается оно a+bi. Действительная часть a это обычное число в нашем представлении, а вот мнимая часть bi интересней. i - называют мнимой единицей. Почему мнимой? А потому, что если мы возведем i в квадрат, то получим -1.
Комплексные числа можно складывать, вычитать, умножать, делить, возводить в степень и извлекать корень, нельзя только их сравнивать. Комплексное число можно изобразить как точку на плоскости, у которой координата Х это действительная часть a, а Y это коэффициент при мнимой части b.
На рисунке, изображающем множество Мандельброта я взял небольшой участок и увеличил его до размеров всего экрана (как в микроскоп). Что же мы видим? Проявление самоподобности. Не точной самоподобности, но близкой и с ней мы будем сталкиваться постоянно, увеличивая части нашего фрактала больше и больше. До каких же пор мы можем увеличивать наше множество? Так вот если мы увеличим его до предела вычислительной мощности компьютеров, то покроем площадь равную площади солнечной системы вплоть до Сатурна.
Стохастические фракталы-5080012128500Типичный представитель данного класса фракталов "Плазма". Для ее построения возьмем прямоугольник и для каждого его угла определим цвет. Далее находим центральную точку прямоугольника и раскрашиваем ее в цвет равный среднему арифметическому цветов по углам прямоугольника плюс некоторое случайное число. Чем больше случайное число - тем более "рваным" будет рисунок. Если мы теперь скажем, что цвет точки это высота над уровнем моря - получим вместо плазмы - горный массив. Именно на этом принципе моделируются горы в большинстве программ. С помощью алгоритма, похожего на плазму строится карта высот, к ней применяются различные фильтры, накладываем текстуру и пожалуйста фотореалистичные горы готовы.
Программирование фракталовL-системыЛюбителям фракталов и математических картинок известны фантастические изображения растений, полученные с помощью программ. Это так называемые L-системы. В основе их построения лежат два принципа. Первый – это так называемая «черепашья графика» (оператор draw) патриарха GWBASIC и его детей Turbo Basic и QBasic, когда движение рисуется пошагово в приращениях относительно текущей точки. Либо моделируется данное поведение, задавая движение в приращениях координат. Второй принцип – изюминка метода: каждое единичное движение заменяется на весь рисунок. Например, нарисуем вилку-рогатульку. На следующем шаге работы программы каждая из трех палочек вилки заменяется такой-же вилкой, превращая вилку в ветку с сучками, после следующего шага получим лохматый куст, потом пушистое дерево, красивое, фрактальное. Меняя вид начальной картинки можно получать самые разные изображения от зонтиков укропа до колючего перекати-поле или пучка водорослей.
Суть L-кодирования сводится к следующему. Представим себе некое виртуальное программируемое устройство, состоящее из пера, управляющего им механизма и листа бумаги. Управляющий пером механизм способен исполнять несколько команд. А именно: он может опустить перо на бумагу и вычертить прямой отрезок заданной длины в направлении текущей ориентации пера (команда F). Он может изменить ориентацию пера по отношению к текущей на какой-то заданный относительный угол по часовой или против часовой стрелки (команды + и -). Он может также запоминать (заносить в стек) свое текущее состояние (команда [) и вспоминать (извлекать из стека) ранее запомненное состояние (команда ]). Под состоянием в данном случае понимается тройка чисел (x, y, a), где x и y - это координаты пера и а - это угол, определяющий направление ориентации пера. Таким образом, задав некое начальное направление а0, определив относительный угол поворота в 900 и задав длину отрезка, при помощи последовательности команд F+F+ F+F мы можем нарисовать квадрат. Определив относительный угол поворота в 600, при помощи последовательности команд F++F++F можно нарисовать равносторонний треугольник.
Предположим также, что в программы для нашего виртуального устройства, кроме пяти перечисленных команд, можно включать любые другие символы, которые управляющий механизм будет просто игнорировать. То есть если мы введем программу F+BF+CCF+CF, то устройство все равно нарисует квадрат. Теперь мысленно оснастим наше устройство приставкой, которая перед тем, как передать введенную программу на управляющий механизм, может заданное число раз просматривать ее, и при каждом очередном просмотре заменять любые символы последовательности по предварительно указанным правилам. Исходную программную последовательность символов теперь будем называть аксиомой. Например, введем аксиому FB+, и определим правило B < F+FB. Зададим также количество просмотров, равное, например, двум. Тогда на входе механизма после обработки введенной аксиомы приставкой получим последовательность FF+FF+FB+. При помощи описанного несложного виртуального устройства можно строить множество самых разнообразных фрактальных форм - от традиционных математических фракталов, таких, как, например, снежинка Коха или кривая Гильберта, до структур, очень напоминающих растительную или подводную жизнь
Построения геометрических фракталов на Pascal ABC.Фракталы этого класса самые наглядные. В них сразу видна самоподобность.
Задание №1
Рассмотрим «Треугольник Серпинского». Для этого берём равносторонний треугольник, затем отмечаем середины сторон. проводим средние линии и исключаем средний треугольник. В оставшихся трёх треугольниках опять проводим средние линии и исключаем средние треугольники и т.д. Если мы теперь возьмем любой из образовавшихся треугольников и увеличим его – получим точную копию целого. В данном случае имеем дело с полным самоподобием.
Uses Crt,graphABC;
Var x1,y1,x2,y2,x3,y3, a,b,n: integer;
{procedura,kotoraya delit vneshnii treugol'nik na chasti v zavisimosti otzadannogo n. Eta procedura vipoln'yaetsya do teh por poka n ne stanet ravnoe 0}
PROCEDURE TRI(x1,y1,x2,y2,x3,y3, N: integer);
Var x12,y12,x23,y23,x31,y31: integer;
begin If N=0 then EXIT;
x12:=(x1+x2) div 2; y12:=(y1+y2) div 2; {vichislenie koordinat novogo treugol'nika}
x23:=(x2+x3) div 2; y23:=(y2+y3) div 2;
x31:=(x3+x1) div 2; y31:=(y3+y1) div 2;
setpencolor(15-n);
MoveTo(x31,y31); LineTo(x12,y12); {vivod na ekran treugol'nika}
LineTo(x23,y23);
LineTo(x31,y31);
TRI(x1,y1,x12,y12,x31,y31, N-1);
TRI(x2,y2,x12,y12,x23,y23, N-1);
TRI(x3,y3,x31,y31,x23,y23, N-1);
end;
Begin write('n= ');readln(n); {pol'zovatelem vvoditsya kollichestxo urovney n}
x1:=320; y1:=0; x2:=639; y2:=479; x3:=0; y3:=479; {koordinati bol'shogovneshnego treugol'nika (A) }
Moveto(x1,y1); LineTo(x2,y2); {na ekran vivoditsya vneshnii treugol'nik}
LineTo(x3,y3);
LineTo(x1,y1);
TRI(x1,y1,x2,y2,x3,y3, n); {vizov prozeduri}
Begin;
SetWindowCaption('Треугольник Серпинского');
SetWindowSize(600,400);
end;
end. Uses Crt,graphABC;
Var x1,y1,x2,y2,x3,y3, a,b,n: integer;
{procedura,kotoraya delit vneshnii treugol'nik na chasti v zavisimosti otzadannogo n. Eta procedura vipoln'yaetsya do teh por poka n ne stanet ravnoe 0}
PROCEDURE TRI(x1,y1,x2,y2,x3,y3, N: integer);
Var x12,y12,x23,y23,x31,y31: integer;
begin If N=0 then EXIT;
x12:=(x1+x2) div 2; y12:=(y1+y2) div 2; {vichislenie koordinat novogo treugol'nika}
x23:=(x2+x3) div 2; y23:=(y2+y3) div 2;
x31:=(x3+x1) div 2; y31:=(y3+y1) div 2;
setpencolor(15-n);
MoveTo(x31,y31); LineTo(x12,y12); {vivod na ekran treugol'nika}
LineTo(x23,y23);
LineTo(x31,y31);
TRI(x1,y1,x12,y12,x31,y31, N-1);
TRI(x2,y2,x12,y12,x23,y23, N-1);
TRI(x3,y3,x31,y31,x23,y23, N-1);
end;
Begin write('n= ');readln(n); {pol'zovatelem vvoditsya kollichestxo urovney n}
x1:=320; y1:=0; x2:=639; y2:=479; x3:=0; y3:=479; {koordinati bol'shogovneshnego treugol'nika (A) }
Moveto(x1,y1); LineTo(x2,y2); {na ekran vivoditsya vneshnii treugol'nik}
LineTo(x3,y3);
LineTo(x1,y1);
TRI(x1,y1,x2,y2,x3,y3, n); {vizov prozeduri}
Begin;
SetWindowCaption('Треугольник Серпинского');
SetWindowSize(600,400);
end;
end.
Задание № 2
Построить фрактал Множество Аполлона
"Представьте себе окружность, а затем впишите в нее еще три окружности наибольшего возможного радиуса, конгруэнтные друг другу: повторите аналогичную операцию с каждой из этих окружностей и с каждым промежутком между ними. А теперь вообразите, что этот процесс продолжен до бесконечности..." - так впервые в письме Лейбница к де Броссу была описана конструкция, в последствии названная Бенуа Мандельбротом Упаковкой Лейбница.Упаковка Лейбница похожа на более известный фрактал - Аполлониеву Сеть. Представляет она собой бесконечное количество окружностей вместе с их предельными точками. Этот фрактал назван в честь Аполлония Пергского - древнегреческого математика, жившего в III в. до нашей эры. Он был представителем александрийской школы и верным последователем Евклида и известен, помимо прочего, тем, что составил алгоритм построения пяти окружностей, касательных к трем заданным окружностям. В том случае, когда заданные окружности взаимно касательны, число аполлониевых кругов равно двум.Снова совершим переход с плоскости в пространство. Возьмем четыре шара произвольного радиуса, и между ними впишем еще один, далее будем повторять эту процедуру до бесконечности. В итоге мы получим тремерное Аполлониево Множество. И никто нам не мешает повторить этот процесс с гиперсферами в четырех, пяти и шести мерных пространствах.
Заметим, что кроме Аполлониева Множества с помощью целующихся кругов, меняя алгоритм, можно построить множество других фракталов. Но фрактал можно строить и совершенно другим способом. Для этого возьмем окружность, и впишем в него несколько целующихся окружностей. Затем с каждой из новых окружностей повторим эту операцию. В пределе мы получим фрактал, который так и называется Целующиеся Круги.
А теперь программа построения множества Аполлона, используя нелинейные преобразования.
Program Apollony;
Uses CRT, GraphABC;
Var //объявляем переменные
gd, gm: Integer;
x, y, a, b: Real;
r: Real;
a0, b0: Real;
a1, b1, a2, b2: Real;
f1x, f1y: Real;
x1, y1: Real;
Begin
x:=0.2;
y:=0.3;
a:=0;
b:=0;
Randomize; //подключаем генератор случайных чисел
r:=Sqrt(3); //задаём радиус круга
While not KeyPressed Do Begin //цикл будет работать,пока не нажата клавиша
a:=random;
a0:=3*(1+r-x)/(sqr(1+r-x)+sqr(y))-(1+r)/(2+r);
b0:=3*y/(sqr(1+r-x)+sqr(y));
If (a<=1/3) and (a>=0) Then Begin
x1:=a0;
y1:=b0;
End; //в цикле производим вычисления
a1:=-1/2;
b1:=r/2;
a2:=-1/2;
b2:=-r/2;
f1x:=a0/(sqr(a0)+sqr(b0));
f1y:=-b0/(sqr(a0)+sqr(b0));
If (a<=2/3) And (a>1/3) Then Begin
x1:=f1x*a1-f1y*b1;
y1:=f1x*b1+f1y*a1;
End;
If (a<= 3/3) and (a>2/3) Then Begin
x1:=f1x*a2-f1y*b2;
y1:=f1x*b2+f1y*a2;
End;
x:=x1;
y:=y1;
PutPixel(320+Round(x*50), 240+Round(y*50), 15); //рисуем множество
End;
ReadLn;
End.
Задание № 3
Построить фрактал крест
Используются два нелинейных преобразования. Эти преобразования выглядят следующим образом:
Здесь L - поворот на 90 градусов относительно точки (0, 0), а R - "растяжение" относительно точки (1, 0) с переменным показателем, который зависит от растояния от центра (1, 0). Приведенный пример получен при a=2,8.
program Rnd;
Uses CRT, GraphABC;
Var gd,gm : Integer;
Procedure draw; //создаём процедуру,которая будет рисовать этот крест
const iter = 70000;
a = 2.8;
Var //объявляем переменные
t, x, y, p : Real;
k : LongInt;
mx, my, rad : Integer;
Begin
mx := 320;
my := 240;
rad := 200;
Randomize; //подключаем генератор случайных чисел
x := 0.0;
y := 0.0;
For k := 1 To iter Do Begin
p := Random;
t := x;
If p <= 1/2 Then Begin //применяем условие для L
x := -y;
y := t;
End
Else
Begin //применяем условие для R
x := 1+(a*(x-1))/(sqr(x-1)+sqr(y)+1);
y := a*y/(sqr(t-1)+sqr(y)+1);
End;
PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);
End;
End;
Begin
ReadKey;
End.
Задание №4
Построить фрактал «снежинка»
Алгоритм работы над задачей:• Определим, какие данные нужны для рисования снежинки и введем обозначения:n – количество звеньев снежинки, p – количество ветвей снежинки, l – длину (в точках) ветви внутреннего звена, t - коэффициент уменьшения каждого звена.• Центр снежинки расположим в центре экрана монитора (320, 240).• Начинаем рисовать из центра снежинки: рисуем первый (длины l) отрезок, далее, если это не последнее звено, то рисуем отрезок длины l*t следующего звена,и так до тех пор, пока не нарисуем отрезок последнего звена (l*tn-1).• На последнем звене дорисовываем самую маленькую снежинку.• Возвращаемся на предпоследний отрезок и дорисовываем самое маленькое звено со снежинкой.• И так продолжаем до тех пор, пока не нарисуем всю снежинку. Эта логика рисования легко реализуется с помощь рекурсии.
program Example_66;
uses graphabc;
302958513271500const p=8;pi=3.14; n=4;
var x,y,i,cd,gm:integer;
l:array[1..n] of integer;
procedure picture3(x,y,k:integer);
var x1,y1:integer;
i:integer;
beginif k>0 then begin
for i:=1 to p do
begin x1:=trunc(x+l[k]*cos(2*pi*(i-1)/p));
y1:=trunc(y+l[k]*sin(2*pi*(i-1)/p));
line(x,y,x1,y1); picture3(x1,y1,k-1);
end;
end;
end;
beginl[n]:=trunc(200*3*exp((n-1)*ln(4))/(exp(n*ln(4))-1)); {***}
for i:=2 to n do l[n-i+1]:=trunc(l[n]/exp((i-1)*ln(4)));
x:=300; y:=200; picture3(x,y,n);
readln;
end.
Задание №5
Построить фрактал "Ветка"
Фрактал состоит из сочетания линий, координаты начала и конца определяются по формуле Line(x, y, Round(x + l * cos(u)), Round(y - l * sin(u))), "кустистость" ветки регулируется коэффициентом на котороый умножается переменная l в функции Drawprogram Vetka2;
uses GraphABC, CRT;
const min = 1;
var gd, gm : Integer;
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 KeyPressed then exit;
if l > min then begin
lineto1(x, y, l, u);
x := Round(x + l * cos(u));
y := Round(y - l * sin(u));
Draw(x, y, l*0.4, u - pi/4);
Draw(x, y, l*0.4, u + pi/4);
Draw(x, y, l*0.7, u);
end;
end;
begin Draw(320, 460, 120, pi/2);
ReadKey;
end.
Задание № 6
Построить фрактал Hopalong.
Данный фрактал рисуется с использованием формул:x'=y-sign(x)*sqrt(abs(b*x-c))y'=a - x
x' и y' - эти значения, которые вычисляются на основании значений, полученных на предыдущем шаге.
Меняя параметры a, b и c можно получить совершенно разные изображения(см. прикреплённые изображения).
Примеры параметров: a=0.4, b=1,с=0.a=1, b=4,с=60.a=-1, b=-2,с=-3.a=-1000, b=0.1,с=-10.
Uses GraphABC, Crt;
Var
x, t, y : Real;
sign : Integer;
n : Integer;
gd, gm : Integer;
Begin
x:=0;
y:=0;
n:=0;
While Not KeyPressed Do Begin
t:=x; \\запоминаем значение x вычисленное на предыдущем шаге
if x>0 then sign:=1 \\запоминаем знак x
else sign :=-1;
x:=y-sign*sqrt(abs(4*x-60)); \\вычисляем новое значение x
y:=1-t; \\вычиляем новое значение y
inc(n);
PutPixel(round(x*2)+320,round(y*2)+240,n mod 16) \\рисуем очередную точку
End;
Readkey;
CloseGraph;
end.
Задание №7
Фрактал 'Julia Set'
Большая часть из предствленных здесь фракталов - Julia Set. Некоторая часть - Mandelbrot Set. Также есть алгоритм каждого фрактала.
Для начала давайте изучим исходный текст построения стандартного вида фрактала Julia Set.
program fractali;
Uses graphABC;
var d,i,ws,hs,rt:integer;
wx,wy,cx,cy,x,y,m,n,r,theta:real;
begin ws:=WindowWidth;
hs:=WindowHeight;
for i:=1 to 1000000 do {kolichestvo iteraziy}
begincx:=-1;cy:=0; {konstanti vida}
wx:=x-cx;
wy:=y-cy;
if wx>0 then theta:=arctan(wy/wx);
if wx<0 then theta:=3.14159+arctan(wy/wx);
if wx=0 then theta:=1.57079; {pi/2}
theta:=theta/2;
r:=sqrt(wx*wx+wy*wy);
if random<0.5 then
r:=sqrt(r)
else r:=-sqrt(r);
x:=r*cos(theta);
y:=r*sin(theta);
m:=-5+(x)*100+ws/2;
n:=(y)*100+hs/2;
PutPixel (trunc(m),trunc(n),13);
end;
begin SetWindowCaption('Julia Set');
SetWindowSize(600,400);
end;
end.
у, теперь, когда Вы уже имеете понятие о JuliaSet можно чуть-чуть поэкспериментировать. Начнем с видового преобразования. В принципе достаточно изменять значения констант cx и cy, чтобы получить совершенно другой вид фрактала. Можно создавать целые библиотеки видов. Приведем несколько примеров:
cxcyИзображение
0.2 0.3
0 1
Cos(x) x
Еще один способ изменять вид фрактала - изменить алгоритм построения. Допустим, строку r=Sqr(wx^2+wy^2) можно изменить следующим образом: r = Sqr((wx + wy) ^ 2 + (wy + wx) ^ 2) , при этом получится следующий вид:
Далее мы приведем Вам некоторые изображения фракталов, а рядом - описание алгоритма их построения.
Изображения приведены в масштабе 1:2 (50%)
Описание изображение
Количество итераций = 500'000 (рекомендую)
Cx=-1;Cy=0
Модуль r=Sqr((wx + x) ^ 2 + (wy - y) ^ 2)
Остальноe точно также как и начальном алгоритме
Количество итераций =128'000 (рекомендую)
Cx=-0.3;Cy=0.2
Модуль r=Sqr((wx + x) ^ 2 + (wy - y) ^ 2)
Остальное - то же.
Количество итераций =200'000 (рекомендую)
Cx=0;Cy=0
Модуль r=Sqr((wx + x) ^ 2 + (wy - y) ^ 2)
Остальное - то же.
Можно изменять также значения угла theta и многое многое другое...
ЗАКЛЮЧЕНИЕВ моей работе приведены далеко не все области человеческих знаний, где нашла свое применение теория фракталов. Хотим только сказать, что со времени возникновения теории прошло не более трети века, но за это время фракталы для многих исследователей стали внезапным ярким светом в ночи, которые озарил неведомые доселе факты и закономерности в конкретных областях данных. С помощью теории фракталов стали объяснять эволюцию галактик и развитие клетки, возникновение гор и образование облаков, движение цен на бирже и развитие общества и семьи. Может быть, в первое время данное увлечение фракталами было даже слишком бурным и попытки все объяснять с помощью теории фракталов были неоправданными. Но, без сомнения, данная теория имеет право на существование, и мы сожалеем, что в последнее время она как-то забылась и осталась уделом избранным. При подготовке данной работы нам было очень интересно находить применения ТЕОРИИ на ПРАКТИКЕ. Потому что очень часто возникает такое ощущение, что теоретические знания стоят в стороне от жизненной реальности.
В завершение нашей работы, мы хотим привести восторженные слова крестного отца теории фракталов Бенуа Мандельброта: “Геометрия природы фрактальна!”. В наше время это звучит также дерзко и абсурдно, как знаменитое восклицание Г. Галилея: “А все-таки она вертится!” в XVI веке.
Использованные материалы
http://arbuz.ferghana.ru/
http://sakva.narod.ru/fractals.htm
Шейпак И.А. Фракталы, графталы, кусты… //Химия и жизнь. 1996 №6
Постижение хаоса //Химия и жизнь. 1992 №8
Мандельброт Б. Фрактальная геометрия природы. М.: «Институт компьютерных исследований», 2002.
Пайтген Х.-О., Рихтер П. Х. Красота фракталов. — М.: «Мир», 1993.
Федер Е. Фракталы. — М: «Мир», 1991.
Шредер М. Фракталы, хаос, степенные законы. — Ижевск: «РХД», 2001
Кузнецов С.П. Динамический хаос. — Москва: «Физматлит», 2001
Климонтович Ю.Л. Введение в физику открытых систем. М.: Янус–К, 2002