Снежинка коха построение. Как нарисовать снежинку Коха, фото-схемы, как выглядит снежинка Коха? Разметка пользовательского интерфейса приложения в Среде разработки приложений

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

На международном симпозиуме по методологии математического моделирования в Варне еще в 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. Все остальное можно получить путем описанных замен. Я не буду приводить здесь код процедуры и тем самым лишать вас удовольствия разработать свою программу самостоятельно. При ее написании вовсе необязательно использовать явный рекурсивный вызов. Его можно заменить обычным циклом. В процессе работы у вас будет лишний повод поразмыслить о рекурсии и ее роли в образовании квазифрактальных форм окружающего нас мира, а в конце пути (если, конечно, не поленитесь пройти его до конца) вы сможете полюбоваться сложным узором контуров фрактальной снежинки, а также заглянуть, наконец, в лицо бесконечности.

Снежинка Коха

В начале ХХ века математики искали такие кривые, которые ни в одной точке не имеют касательной. Это означало, что кривая резко меняет свое направление, и притом с колоссально большой скоростью (производная равна бесконечности). Поиски данных кривых были вызваны не просто праздным интересом математиков. Дело в том, что в начале ХХ века очень бурно развивалась квантовая механика. Исследователь М.Броун зарисовал траекторию движения взвешенных частиц в воде и объяснил это явление так: беспорядочно движущиеся атомы жидкости ударяются о взвешенные частицы и тем самым приводят их в движение. После такого объяснения броуновского движения перед учеными встала задача найти такую кривую, которая бы наилучшим образом аппроксимировала движение броуновских частиц. Для этого кривая должна была отвечать следующим свойствам: не иметь касательной ни в одной точке. Математик Кох предложил одну такую кривую. Мы не будем вдаваться в объяснения правила ее построения, а просто приведем ее изображение, из которого все станет ясно (рис.1.1.1).

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

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

Рис. 1.1.2. Построение снежинки Коха.


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

Салфетка и ковёр Серпинского

Еще один пример простого самоподобного фрактала --- салфетка Серпинского (рис. 1.2.1), придуманный польским математиком Вацлавом Серпинским в 1915 году. Сам термин салфетка принадлежит Мандельброту. В способе построения, следующем ниже, мы начинаем с некоторой области и последовательно выбрасываем внутренние подобласти. Позднее мы рассмотрим и другие способы, в частности с использованием L-систем, а также на основе итерированных функций.

Рис 1.2.1. Салфетка Серпинского

Пусть начальное множество S 0 --- равносторонний треугольник вместе с областью, которую он замыкает. Разобьем S 0 на четыре меньшие треугольные области, соединив отрезками середины сторон исходного треугольника. Удалим внутренность маленькой центральной треугольной области. Назовем оставшееся множество S 1 (рис. 1.2.2). Затем повторим процесс для каждого из трех оставшихся маленьких треугольников и получим следующее приближение S 2 . Продолжая таким образом, получим последовательность вложенных множеств S n , чье пересечение образует салфетка S.

Рис. 1.2.2. Построение салфетки Серпинского


Очевидно, что суммарная площадь частей, выкинутых при построении, в точности равна площади исходного треугольника. На первом шаге мы выбросили ј часть площади. На следующем шаге мы выбросили три треугольника, причем площадь каждого равна ј 2 площади исходного. Рассуждая таким образом, мы убеждаемся, что полная доля выкинутой площади составила:

1/4 + 3 * (1/4 2) + 3 2 * (1/4 3) + … + 3 n-1 * (1/4 n) + … .

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

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

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


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

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

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

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

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

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°.
Квадратный вариант . Тут достраиваются квадраты.
Трехмерные аналоги . Пространство Коха.

Три копии кривой Коха, построенные (остриями наружу) на сторонах правильного треугольника , образуют замкнутую кривую бесконечной длины, называемую снежинкой Коха .

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

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

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

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

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

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°.

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





Снежинка Коха

canvas {
border: 1px dashed black;
}

var cos = 0.5,
sin = Math.sqrt(3) / 2,
deg = Math.PI / 180;
canv, ctx;

function rebro(n, len) {
ctx.save(); // Сохраняем текущую трансформацию
if (n == 0) { // Нерекурсивный случай - отрисовываем линию
ctx.lineTo(len, 0);
}
else {
ctx.scale(1 / 3, 1 / 3); // Уменьшаем масштаб в 3 раза
rebro(n-1, len); //RECUURSION на ребре
ctx.rotate(60 * deg);
rebro(n-1, len);
ctx.rotate(-120 * deg);
rebro(n-1, len);
ctx.rotate(60 * deg);
rebro(n-1, len);
}
ctx.restore(); // Восстанавливаем трансформацию
ctx.translate(len, 0); // переходим в конец ребра
}

function drawKochSnowflake(x, y, len, n) {
x = x - len / 2;
y = y + len / 2 * Math.sqrt(3)/3;
ctx.save();
ctx.beginPath();
ctx.translate(x, y);
ctx.moveTo(0, 0);
rebro(n, len); ctx.rotate(-120 * deg); //RECUUUURSION уже треугольник
rebro(n, len); ctx.rotate(-120 * deg);
rebro(n, len); ctx.closePath();
ctx.strokeStyle = "#000";
ctx.stroke();
ctx.restore();
}

function clearcanvas(){ //чистим канвас
ctx.save();
ctx.beginPath();

// Use the identity matrix while clearing the canvas
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.clearRect(0, 0, canvas1.width, canvas1.height);

// Restore the transform
ctx.restore();
}

function run() {
canv = document.getElementById("canvas1");
ctx = canv.getContext("2d");
var numberiter = document.getElementById("qty").value;
drawKochSnowflake(canv.width/2, canv.height/2, 380, numberiter);

Ctx.stroke(); //отрисовка
}




Снежинка Коха - пример









Кривая Коха - фрактальная кривая, описанная в 1904 году шведским математиком Хельге фон Кохом. Три копии кривой Коха, построенные (остриями наружу) на сторонах правильного треугольника, образуют замкнутую кривую, называемую снежинкой Коха.

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

Снежинка Коха

Этот фрактал - один из первых исследованных учёными. Он получается из трёх копий кривой Коха, которая впервые появилась в статье шведского математика Хельге фон Коха в 1904 году. Эта кривая была придумана как пример непрерывной линии, к которой нельзя провести касательную ни в одной точке.

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

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

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

    В частности, как повернуть точку относительно другой точки:

    Ну и необходимо знать, как найти точку на отрезке, отдалённую на какое-то расстояние от точки, зная это расстояние и координаты точек. Методов так-то много. Можно найти координаты прямой, содержащую точки эти, а потом подставлять в уравнение. Можно вычислить координаты, используя вектора.

    Выглядит как-то так.