Прямая коха. Программы на Pascal (Паскаль): снежинка и кривая Коха, фракталы

💖 Нравится? Поделись с друзьями ссылкой

Эта фигура - один из первых исследованных учеными фракталов. Она получается из трех копий кривой Коха , которая впервые появилась в статье шведского математика Хельге фон Коха в 1904 году. Эта кривая была придумана как пример непрерывной линии, к которой нельзя провести касательную ни в одной точке. Линии с таким свойством были известны и раньше (Карл Вейерштрасс построил свой пример еще в 1872 году), но кривая Коха замечательна простотой своей конструкции. Не случайно его статья называется «О непрерывной кривой без касательных, которая возникает из элементарной геометрии».

Написание функции, которая рекурсивно вызывает себя, является одним из способов генерации фрактальной диаграммы на экране. Однако, что, если вы хотите, чтобы строки в вышеуказанном Канторе устанавливались как отдельные объекты, которые можно было перемещать независимо? Рекурсивная функция проста и изящна, но это не позволяет вам многое сделать, кроме простого создания самого шаблона.

Вот правила. Кривую Коха и другие фрактальные узоры часто называют «математическими монстрами». Это связано с нечетным парадоксом, который возникает, когда вы применяете рекурсивное определение бесконечно много раз. Если длина исходной стартовой линии равна единице, первая итерация кривой Коха даст длину линии четыре трети. Сделайте это снова, и вы получите шестнадцать-девятый. По мере того как вы итерируете в бесконечность, длина кривой Коха приближается к бесконечности. Тем не менее, он вписывается в крошечное конечное пространство, предоставленное прямо здесь, на этой бумаге!

Первые этапы построения кривой Коха

Рисунок и анимация отлично показывают, как по шагам строится кривая Коха. Первая итерация - просто начальный отрезок. Потом он делится на три равные части, центральная достраивается до правильного треугольника и затем выкидывается. Получается вторая итерация - ломаная линия, состоящая из четырех отрезков. К каждому из них применяется такая же операция, и получается четвертый шаг построения. Продолжая в том же духе, можно получать всё новые и новые линии (все они будут ломаными). А то, что получится в пределе (это уже будет воображаемый объект), и называется кривой Коха.

Поскольку мы работаем на Земле обработки конечных пикселей, этот теоретический парадокс не будет для нас фактором. Мы могли бы действовать так же, как и с канторским множеством, и писать рекурсивную функцию, которая итеративно применяет правила Коха снова и снова. Тем не менее, мы будем решать эту проблему по-другому, рассматривая каждый отрезок кривой Коха как отдельный объект. Это откроет некоторые возможности дизайна. Например, если каждый сегмент является объектом, мы можем позволить каждому сегменту двигаться независимо от его исходного местоположения и участвовать в физическом моделировании.

Основные свойства кривой Коха

1. Она непрерывна, но нигде не дифференцируема. Грубо говоря, именно для этого она и была придумана - как пример такого рода математических «уродцев».

2. Имеет бесконечную длину. Пусть длина исходного отрезка равна 1. На каждом шаге построения мы заменяем каждый из составляющих линию отрезков на ломаную, которая в 4/3 раза длиннее. Значит, и длина всей ломаной на каждом шаге умножается на 4/3: длина линии с номером n равна (4/3) n–1 . Поэтому предельной линии ничего не остается, кроме как быть бесконечно длинной.

Кроме того, мы могли бы использовать случайный цвет, толщину линии и т.д. Чтобы отображать каждый сегмент по-разному. Чтобы выполнить нашу задачу обработки каждого сегмента как отдельного объекта, мы должны сначала решить, что должен делать этот объект. Какие функции он должен иметь?

Давайте рассмотрим, что у нас есть. С приведенными выше элементами, как и где мы применяем правила Коха и принципы рекурсии? В этом симуляции мы всегда следили за двумя поколениями: текущими и последующими. Когда мы закончили вычислять следующее поколение, теперь стало актуальным, и мы перешли к вычислению нового следующего поколения.

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

Мы будем применять подобную технику здесь. Вот как выглядит код. Разумеется, вышеприведенное исключает настоящую «работу» здесь, которая определяет эти правила. Как мы разбиваем один сегмент линии на четыре, как описано правилами? Построение фрактала основано на концепции бесконечности. Шаг 2: Мы разделим этот сегмент на три равные части, а на центральной части поднят равносторонний треугольник. Шаг 3: На четырех новых сегментах мы выполним шаг.

Пересеките инструмент между двумя объектами, щелкните по окружности. Снежинка Коха - это особая фрактальная кривая, построенная математиком Коха, начиная с кружева Коха. Это кривая, построенная по сторонам равностороннего треугольника. Кружева Коха построены на каждой из сторон треугольника.

Пусть сторона исходного правильного треугольника равна a . Тогда его площадь. Сначала сторона равна 1, а площадь: . Что происходит при увеличении итерации? Можно считать, что к уже имеющемуся многоугольнику пристраиваются маленькие равносторонние треугольнички. В первый раз их всего 3, а каждый следующий раз их в 4 раза больше чем было в предыдущий. То есть на n -м шаге будет достроено T n = 3 · 4 n–1 треугольничков. Длина стороны каждого из них составляет треть от стороны треугольника, достроенного на предыдущем шаге. Значит, она равна (1/3) n . Площади пропорциональны квадратам сторон, поэтому площадь каждого треугольничка равна . При больших значениях n это, кстати, очень мало. Суммарный вклад этих треугольничков в площадь снежинки равенT n · S n = 3/4 · (4/9) n · S 0 . Поэтому после n -го шага площадь фигуры будет равна сумме S 0 + T 1 · S 1 + T 2 · S 2 + ... +T n · S n = . Снежинка получается после бесконечного числа шагов, что соответствует n → ∞. Получается бесконечная сумма, но это сумма убывающей геометрической прогрессии, для нее есть формула: . Площадь снежинки равна.

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

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

4. Фрактальная размерность равна log4/log3 = log 3 4 ≈ 1,261859... . Аккуратное вычисление потребует немалых усилий и подробных разъяснений, поэтому здесь приведена, скорее, иллюстрация определения фрактальной размерности. Из формулы степенной зависимости N(δ) ~ (1/δ)D, где N - число пересекающихся квадратиков, δ - их размер, D - размерность, получаем, что D = log 1/δ N. Это равенство верно с точностью до прибавления константы (одной и той же для всех δ ). На рисунках изображена пятая итерация построения кривой Коха, зеленым закрашены квадратики сетки, которые с ней пересекаются. Длина исходного отрезка равна 1, поэтому на левом рисунке длина стороны квадратиков равна 1/9. Закрашено 12 квадратиков, log 9 12 ≈ 1,130929... . Пока не очень похоже на 1,261859... . Смотрим дальше. На среднем рисунке квадратики в два раза меньше, их размеры 1/18, закрашено 30. log 18 30 ≈ 1,176733... . Уже лучше. Справа квадратики еще вдвое меньше, закрашено уже 72 штуки. log 72 30 ≈ 1,193426... . Еще ближе. Дальше нужно увеличивать номер итерации и одновременно уменьшать квадратики, тогда «эмпирическое» значение размерности кривой Коха будет неуклонно приближаться к log 3 4, а в пределе и вовсе совпадет.

Варианты

Снежинка Коха «наоборот» получается, если строить кривые Коха внутрь исходного равностороннего треугольника.

Линии Чезаро . Вместо равносторонних треугольников используются равнобедренные с углом при основании от 60° до 90°. На рисунке угол равен 88°.

Квадратный вариант . Тут достраиваются квадраты.

Трехмерные аналоги . Пространство Коха.

Тема: Фракталы.

1.Введение. Краткая историческая справка о фракталах. 2.Фракталы – элементы геометрии в природе.

3.Объекты, обладающие фрактальными свойствами, в природе. 4.Определение терминологии «фракталы».

5.Классы фракталов.

6.Описание фрактальных процессов. 7.Процедуры получения фрактальных множеств.

8.1 Ломаная Коха (процедура получения).

8.2 Снежинка Коха (Фрактал Коха).

8.3 Губки Менгера.

9. Примеры применения фракталов.

Введение. Краткая историческая справка о фракталах.

Фракталы – молодой раздел дискретной математики.

В 1904 году швед Кох придумал непрерывную кривую, которая нигде не имеет касательной – кривая Коха.

В 1918 году француз Жюлиа описал целое семейство фракталов.

В 1938 году Пьер Леви опубликовал статью «Плоские и пространственные кривые и поверхности, состоящие из частей, подобных целому».

В 1982 Бенуа Мандельброта опубликовал книгу «Фрактальная геометрия природы».

С помощью простых конструкций и формул получаются изображения. Появилась «фрактальная живопись».

С 1993 г. Из-во World Scientific издаёт журнал «Фракталы».

Фракталы – элементы геометрии в природе.

Фракталы - средства для описания таких объектов как модели горных хребтов, изрезанной береговой линии, систем кровообращения множества капилляров и сосудов, кроны деревьев, каскадных водопадов, морозные узоры на стекле.

Или такие: лист папоротника, облака, клякса.

Изображения таких предметов можно представить с помощью фрактальной графики.

Объекты, обладающие фрактальными свойствами, в природе.

КораллыМорские звезды и ежиМорские раковины

Цветы и растения (брокколи , капуста )Плоды (ананас )

Кроны деревьев и листья растений Кровеносная система и бронхи людей и животных В неживой природе:

Границы географических объектов (стран, областей, городов)Береговые линии Горные хребты Снежинки Облака Молнии

Образующиеся на стеклах узорыКристаллы Сталактиты, сталагмиты , геликтиты .

Определение терминологии «фракталы».

Фракталы - это геометрические фигуры, которые удовлетворяют одному или нескольким из следующих свойств:

Обладает сложной нетривиальной структурой при любом увеличении (на всех масштабах);Является (приближённо) самоподобной.

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

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

Классы фракталов

Фрактал – структура, состоящая из частей (субструктур), подобных целому.

Часть фракталов, как элементов природы, можно отнести к классу геометрических (конструктивных) фракталов.

Остальная часть может быть отнесена к классу динамических фракталов (алгебраических).

Процедуры получения фрактальных множеств.

Это простая рекурсивная процедура получения фрактальных кривых: задают произвольную ломаную с конечным числом звеньев – генератор. Далее, заменяют в ней каждый отрезок генератор. Затем вновь заменяют в ней каждый отрезок генератором и так до бесконечности.

Изображено: деление единичного отрезка на 3 части (а), единичной квадратной площадки на 9 частей (б), единичного куба на 27 частей (в) и на 64 части (г). Число частей n, коэффициент масштабирования - k, а размерность пространства - d. Имеем следующие соотношения: n = kd,

если n = 3, k = 3, то d = 1; если n = 9, k = 3, то d = 2; если n = 27, k = 3, то d = 3.

если n = 4, k = 4, то d = 1; если n = 16, k = 4, то d = 2; если n = 64, k = 4, то d = 3. Размерность пространства выражается целыми числами: d = 1, 2, 3; для n = 64, величина d равна

Показано пять шагов построения ломаной Коха: отрезок единичной длины (а), делится на три части (k = 3), из четырех частей (n = 4) – ломаная (б); каждый прямой отрезок делится на три части (k2 = 9) и из 16 частей (n2 = 16) – ломаная (в); процедура повторяется для k3 = 27 и n3 = 64 – ломаная (г); для k5 = 243 и n5 = 1024 – ломаную (д).

Размерность

Это дробная, или фрактальная размерность.

Ломаная Коха, предложенная Гельгом фон Кохом в 1904 г., выступает в роли фрактала, который подходит для моделирования изрезанности береговой линии. Мандельброт в алгоритм построения береговой линии внес элемент случайности, который, однако, не повлиял на основной вывод в отношении длины береговой линии. Поскольку предел

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

Процедура сглаживания береговой линии при переходе от более детального масштаба к менее детальному, т.е.

Снежинка Коха (фрактал Коха)

В Качестве основы построения можно брать не отрезки единичной длины, а равносторонний треугольник, на каждую сторону которого распространить процедуру умножения изрезанности. В этом случае получим снежинку Коха (рис.), причем трех видов: вновь образующиеся треугольники направлены только наружу от предыдущего треугольника (а) и (б); только внутрь (в); случайным образом либо наружу, либо внутрь (г) и (д). Как можно задавать процедуру построения фрактала Коха.

Рис. Снежинка Коха

На рис. показаны две векторные диаграммы; числа, стоящие над стрелками, видимо, вызовут вопрос: что бы они значили? Вектор 0 совпадает с положительным направлением оси абсцисс, так как его фазовый множитель exp (i2πl/6) при l = 0 сохраняет его направление. Вектор 1 повернут относительно вектора 0 на угол 2π/6, когда l= 1. Вектор 5 имеет фазовый множитель exp (i2π5/6), l = 5. Последний вектор имеет тот же фазовый множитель, что и первый (l = 0). Целые числа l характеризуют угол фазового множителя единичного вектора.

Первый шаг (рис.), задает рекурсивную процедуру для всех последующих шагов и, в частности, для второго шага (рис.). Как перейти от набора чисел φ1 = {0 1 5 0} к φ2 = {0 1 5 0 1 2 0 1 5 0 4 5 0 1 5 0}? Ответ: через прямое перемножение матриц, когда каждый элемент одной матрицы умножается на исходную матрицу. Поскольку в данном случае мы имеем дело с одномерным массивом, т.е. матрицы представляют собой векторы, то здесь производится умножение каждого элемента одной матрицы-вектора на все элементы другой матрицы-вектора. Кроме того, элементы матрицы-вектора φ1 состоят из показательных функций exp (i2πl/6), следовательно,10 при перемножении числа h нужно будет складывать по mod (6), а не умножать.

В Бостоне была необыкновенно теплая зима, но мы все-таки дождались первого снегопада. Наблюдая за снегопадом в окно, я задумался о снежинках и о том, что их структуру совсем непросто описать математически. Существует однако одна, особого рода снежинка, известная как снежинка Коха, которая может быть описана сравнительно просто. Сегодня мы рассмотрим, как её форма может быть построена с помощью Среды разработки приложений COMSOL Multiphysics.

Создание снежинки Коха

Как мы уже упоминали в нашем блоге, фракталы могут быть использованы в . Снежинка Коха является фракталом, который примечателен тем, что для его построения существует очень простой итерационный процесс:

  1. Начнем с равностороннего треугольника, который фактически является нулевой итерации снежинки Коха.
  2. Найдем центральную точку на каждом ребре текущей снежинки.
  3. В центре каждого ребра, добавим выступающий наружу равносторонний треугольник со стороной равной 1/3 длины текущего ребра.
  4. Определим следующую итерацию снежинки Коха, чтобы оказаться снаружи с внешней стороны предыдущей снежинки и всех добавленных треугольников.
  5. Повторим шаги 2-4 столько раз, сколько потребуется.

Данная процедура иллюстрируется на рисунке ниже для первых четырех итераций отрисовки снежинки.

Первые четыре итерации снежинки Коха. Изображение от Wxs — собственная работа. Лицензия CC BY-SA 3.0 , в Wikimedia Commons .

Построение геометрии снежинки Коха

Поскольку теперь мы знаем, какой алгоритм использовать, то давайте посмотрим, как создать такую структуру с помощью Среды разработки приложений COMSOL Multiphysics. Мы откроем новый файл и создадим двумерный объект геометрическая часть (geometry part) в узле Глобальные определения . Для этого объекта зададим пять входных параметров: длина стороны равностороннего треугольника; х – и y – координаты средней точки основания; и компоненты вектора нормали, направленной от середины основания к противолежащей вершине, как показано на рисунках ниже.


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


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


Объект может поворачиваться вокруг центра нижнего ребра.


Объект можно переместить относительно начала отсчета.

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

Разметка пользовательского интерфейса приложения в Среде разработки приложений

Приложение имеет очень простой пользовательский интерфейс. Оно содержит только два компонента, с которыми пользователь может взаимодействовать: Ползунок (Слайдер) (отмеченный как 1 на рисунке ниже), с помощью которого можно задавать число итераций нужных для создания снежинки, и Кнопка (метка 2), по нажатию которой создается и отображается получившаяся геометрия. Имеются также Текстовая надпись (метка 3) и Отображение (Показ) данных (метка 4), которые показывают число заданных итераций, а также окно Графики (метка 5), в котором выводится итоговая геометрия.


Приложение имеет одну единственную форму с пятью компонентами.

В приложении есть два Определения (Declarations) , одно из которых определяет целое значение, называемое Iterations , и, по умолчанию, равное нулю, но которое может быть изменено пользователем. Определяется также 1D-массив чисел двойной точности с именем Center . Единственный элемент в массиве имеет значение 0.5, которое используется для нахождения центральной точки каждого ребра. Это значение никогда не изменяется.


Настройки для двух Определений.

Компонент "Слайдер" в пользовательском интерфейсе контролирует значение целого числа, параметра Iterations . Скриншот ниже показывает настройки "Слайдера" и значений, которые задаются как целые числа в диапазоне между 0 и 5. Тот же источник (как и для слайдера) также выбран для компонента Отображение данных (Data Display) для отображения на экране приложения числа заданных итераций. Мы ограничиваем потенциального пользователя пятью итерациями, поскольку используемый алгоритм неоптимальный и является не очень эффективным, но достаточно простым для реализации и демонстрации.


Настройки для компонента "Слайдер".

Далее, посмотрим на настройки для нашей кнопки, показанные на скриншоте ниже. При нажатии кнопки запускаются на исполнение две команды. Сначала вызывается метод CreateSnowFlake . Затем в графическом окне выводится получившаяся геометрия.


Настройки кнопки.

Мы сейчас посмотрели на пользовательский интерфейс нашего приложения и могли заметить, что создание любой геометрии снежинки должно произойти посредством вызываемого метода. Давайте посмотрим на программный код этого метода, с добавленной слева нумерацией строк и строковыми константами, выделенными красным цветом:

1 model.geom("geom1" ).feature().clear(); 2 model.geom("geom1" ).create("pi1" , "PartInstance" ); 3 model.geom("geom1" ).run("fin" ); 4 for (int iter = 1; iter "geom1" ).getNEdges()+1; 6 UnionList = "pi" + iter; 7 for (int edge = 1; edge "geom1" ).getNEdges(); edge++) { 8 String newPartInstance = "pi" + iter + edge; 9 model.geom("geom1" ).create(newPartInstance, "PartInstance" ).set("part" , "part1" ); 10 with(model.geom("geom1" ).feature(newPartInstance)); 11 setEntry("inputexpr" , "Length" , toString(Math.pow(1.0/3.0, iter))); 12 setEntry("inputexpr" , "px" , model.geom("geom1" ).edgeX(edge, Center)); 13 setEntry("inputexpr" , "py" , model.geom("geom1" ).edgeX(edge, Center)); 14 setEntry("inputexpr" , "nx" , model.geom("geom1" ).edgeNormal(edge, Center)); 15 setEntry("inputexpr" , "ny" , model.geom("geom1" ).edgeNormal(edge, Center)); 16 endwith(); 17 UnionList = newPartInstance; 18 } 19 model.geom("geom1" ).create("pi" +(iter+1), "Union" ).selection("input" ).set(UnionList); 20 model.geom("geom1" ).feature("pi" +(iter+1)).set("intbnd" , "off" ); 21 model.geom("geom1" ).run("fin" ); 22 }

Давайте пройдемся по коду "построчно", чтобы понять, какую функцию выполняет каждая строка:

  1. Очищаем все существующие геометрические последовательности, так чтобы мы смогли начать с нуля.
  2. Создаем один экземпляр объекта — нашего "треугольника", используя размер, ориентацию и расположение по умолчанию. Это наша снежинка нулевого порядка с меткой-идентификатором pi1 .
  3. Финализируем геометрию. Данная операция требуется для обновления всех индексов геометрии.
  4. Начнем процесс перебора всех заданных итераций снежинки, используя определение Iterations , как условие для остановки.
  5. Определяем пустой массив строк, UnionList . Каждый элемент массива содержит метку-идентификатор различных геометрических объектов. Длина этого массива равна числу ребер в последней итерации плюс один.
  6. Определяем первый элемент в массиве UnionList . Он является меткой-идентификатором результата предыдущей итерации. Имейте в виду, что нулевая итерация уже создана в строках 1-3. Целочисленное значение iter автоматически преобразуется в строку и добавится в конец строки "pi" .
  7. Перебираем число ребер в ранее сгененрированной снежинке.
  8. Задаем метку идентификатора для нового экземпляра объекта, обращающегося с геометрической части (part instance) "треугольник", который создается на этом ребре. Заметьте, что целочисленные значения iter и edge последовательно добавляются в конец строки pi , метки-идентификатора экземпляра объекта.
  9. Создаем экземпляр объекта "треугольник" и присваиваем ему метку-идентификатор, которая только что была задана.
  10. Указываем, что строки 11-15 относятся к текущему экземпляру объекта (part instance), используя оператор with()/endwith() .
  11. Определяем длину стороны треугольника. Нулевой порядок имеет длину стороны равную единице, так что n- я итерация имеет длину стороны (1/3) n . Функция toString() требуется для приведения (преобразования) типов данных — числа с плавающей точкой в строку.
  12. Задаем x -координату нового треугольника, как центральную точку стороны последней итерации. Метод edgeX задокументирован в . Напомним, что Center устанавливается равным 0.5.
  13. Задаем y -координату.
  14. Задаем x -компоненту вектора нормали треугольника. Метод edgeNormal также задокументирован в Справочном руководстве по программированию в среде COMSOL (COMSOL Programming Reference Manual) .
  15. Задаем y -компоненту вектора нормали.
  16. Закрываем оператор with()/endwith() .
  17. Добавляем метку-идентификатор текущего треугольника к списку всех объектов.
  18. Закрываем перебор всех ребер.
  19. Создаем Boolean Union (логическое объединение) всех объектов в геометрическую последовательность. Присваиваем метке новое значение piN , где N есть номер следующей итерации. Вокруг (iter+1) требуются круглые скобки, так чтобы увеличенное значение iter преобразовалось в строку.
  20. Указываем, что внутренние границы конечного объекта не сохраняются.
  21. Финализируем геометрию. Последняя операция обновляет все индексы геометрии для следующей итерации снежинки.
  22. Закрываем цикл итераций создания снежинки.

Таким образом, мы охватили все аспекты и элементы нашего приложения. Давайте посмотрим на результаты!


Наше простое приложение для построения снежинки Коха.

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

Попробуйте Самостоятельно

Если вы хотите построить это приложение самостоятельно, но еще не до конца Среды разработки приложений, то следующие ресурсы могут оказаться вам полезными:

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

После того как вы преодолели этот материал, вы увидите, как функционал приложения может быть расширен для изменения размера снежинки, экспорта созданной геометрии, оценки площади и периметра и многого другого.

Какое приложение вы бы хотели создать в среде COMSOL Multiphysics? за помощью.

Фрактальная снежинка - один из самых известных и загадочных геометрических объектов - описана Хельгой фон Кох еще в начале нашего века. По традиции ее называют у нас в литературе снежинкой Коха. Это очень "колючая" геометрическая фигура, которую метафорически можно рассматривать как результат многократного "умножения" звезды Давида на саму себя. Шесть ее основных лучей покрыты бесконечным количеством больших и малых вершин-"иголочек". Всякий микроскопический фрагмент контура снежинки как две капли воды похож на весь большой луч, а большой луч в свою очередь содержит в себе бесконечное количество таких же микроскопических фрагментов.

На международном симпозиуме по методологии математического моделирования в Варне еще в 1994 году мне на глаза попалась работа болгарских авторов, которые описывали свой опыт использования снежинки Коха и других подобных объектов на уроках в старших классах для иллюстрации проблемы делимости пространства и философских апорий Зенона. Помимо этого, с образовательной точки зрения весьма интересен, на мой взгляд, сам принцип построения регулярных фрактальных геометрических структур - принцип рекурсивного умножения базового элемента. Природа недаром "любит" фрактальные формы. Это объясняется именно тем, что они получаются путем простого размножения и изменения размеров некого одного элементарного строительного блока. Как известно, природа не излишествует разнообразием причин и, где возможно, обходится наиболее простыми алгоритмическими решениями. Присмотритесь внимательно к контурам листьев, и во многих случаях вы обнаружите явное их родство с формой контура снежинки Коха.

Визуализация фрактальных геометрических структур возможна лишь при помощи компьютера. Построить снежинку Коха выше третьего порядка вручную уже очень сложно, а заглянуть в бесконечность так хочется! Поэтому, почему бы ни попытаться разработать соответствующую компьютерную программу. В РуНете можно отыскать рекомендации строить снежинку Коха из треугольников. Результат работы этого алгоритма выглядит как нагромождение пересекающихся линий. Интереснее скомбинировать эту фигуру из "кусочков". Контур снежинки Коха состоит из отрезков одинаковой длины, наклоненных под углом 0°, 60° и 120° по отношению к горизонтальной оси x. Если обозначить их соответственно 1, 2 и 3, то снежинка любого порядка будет состоять из следующих друг за другом троек - 1, 2, 3, 1, 2, 3, 1, 2, 3… и т. д. Каждый из этих трех типов отрезков может прикрепляться к предыдущему одним либо другим концом. С учетом этого обстоятельства можно считать, что контур снежинки состоит из отрезков шести типов. Обозначим их 0, 1, 2, 3, 4, 5. Таким образом, мы получаем возможность кодировать контур любого порядка при помощи 6 цифр (см. рисунок).

Снежинка более высокого порядка получается из предшественницы более низкого порядка путем замены каждого ребра на четыре, соединенных подобно сложенным ладошкам (_/\_). Ребро типа 0 заменяется на четыре ребра 0, 5, 1, 0 и так далее в соответствии с таблицей:

0 0 1 5 0
1 1 2 0 1
2 2 3 1 2
3 3 4 2 3
4 4 5 3 4
5 5 0 4 5

Простой равносторонний треугольник можно рассматривать как снежинку Коха нулевого порядка. В описанной системе кодировки ему соответствует запись 0, 4, 2. Все остальное можно получить путем описанных замен. Я не буду приводить здесь код процедуры и тем самым лишать вас удовольствия разработать свою программу самостоятельно. При ее написании вовсе необязательно использовать явный рекурсивный вызов. Его можно заменить обычным циклом. В процессе работы у вас будет лишний повод поразмыслить о рекурсии и ее роли в образовании квазифрактальных форм окружающего нас мира, а в конце пути (если, конечно, не поленитесь пройти его до конца) вы сможете полюбоваться сложным узором контуров фрактальной снежинки, а также заглянуть, наконец, в лицо бесконечности.

Рассказать друзьям