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


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

Эта фигура — один из первых исследованных учеными фракталов. Она получается из трех копий кривой Коха , которая впервые появилась в статье шведского математика Хельге фон Коха в 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(); //отрисовка
}




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









Всем привет! У всех студентов, и у меня в том числе, началась летняя сессия. Все сдают зачеты и лабы, закрывают пропуски и т.п.

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

Фракталы наверняка вам знакомы и я не буду писать о том, что это такое и с чем их "едят". Давайте просто сразу перейдем к коду. Он на языке Паскаль и адаптирован под PascalABC (скачать PascalABC можно с официального сайта ). Это не мой код, я нашел его на одном из форумов. Я лишь чуть-чуть изменил его, проще говоря, удалил лишнее.

Снежинка Коха на Паскале (Pascal) uses GraphABC; procedure Draw(x, y, l, u: Real; t: Integer); procedure Draw2(Var x, y: Real; l, u: Real; t: Integer); begin Draw(x, y, l, u, t); x:= x + l*cos(u); y:= y - l*sin(u); end; begin if t > 0 then begin l:= l/3; Draw2(x, y, l, u, t-1); Draw2(x, y, l, u+pi/3, t-1); Draw2(x, y, l, u-pi/3, t-1); Draw2(x, y, l, u, t-1); end else Line(Round(x), Round(y), Round(x+cos(u)*l), Round(y-sin(u)*l)) end; begin SetWindowSize(425,500); SetWindowCaption("Фракталы: Снежинка Коха"); Draw(10, 354, 400, pi/3, 4); Draw(410, 354, 400, pi, 4); Draw(210, 8, 400, -pi/3, 4); end.

Вот такая снежинка у вас должна получиться:

Вкратце про параметры процедуры Draw:

1 и 2 параметр - это координаты начальной точки, откуда будет рисоваться линия;

3 - длина линии;

4 - полярный угол;

5 - количество шагов.

Можете поэкспериментировать с количеством шагов, и получится что-то вроде этого:

Кривая Коха на Паскале (Pascal)

Как вы поняли, снежинка рисуется из 3-х кривых Коха. И для того чтобы нарисовать кривую Коха, используем тот же код с разницей лишь той, что процедура Draw вызывается один раз и с другими параметрами.

Uses GraphABC; procedure Draw(x, y, l, u: Real; t: Integer); procedure Draw2(Var x, y: Real; l, u: Real; t: Integer); begin Draw(x, y, l, u, t); x:= x + l*cos(u); y:= y - l*sin(u); end; begin if t > 0 then begin l:= l/3; Draw2(x, y, l, u, t-1); Draw2(x, y, l, u+pi/3, t-1); Draw2(x, y, l, u-pi/3, t-1); Draw2(x, y, l, u, t-1); end else Line(Round(x), Round(y), Round(x+cos(u)*l), Round(y-sin(u)*l)) end; begin SetWindowSize(425,500); SetWindowCaption("Фракталы: Кривая Коха"); Draw(10, 254, 400, 0, 4); end.

Как видите, изменилось мало чего: полярный угол стал равен нулю и начальная точка смещена немного вверх. И вот что получилось:

Разбираться в коде я не стал, но если возникнут вопросы - пишите в комментариях. Вместе разберемся.

Кривая Коха

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

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


Затем каждую из сторон этого треугольника разделим на три равные части, уберем среднюю часть и в середине достроим равносторонний треугольник так, как изображено на рис. На следующем шаге такой же процедуре деления на три равные части и достраивания равностороннего треугольника подвергается каждая из сторон новой фигуры, и так до бесконечности. В результате возникает симметричная, похожая на снежинку, бесконечно изломанная кривая, которая представляет собой самоподобное множество, называемое снежинкой Коха. Она была так названа в честь шведского математика Helge von Koch, который впервые описал ее в 1904. Отличительной ее особенностью является то, что она, будучи замкнутой, тем не менее, нигде себя не пересекает, поскольку достраиваемые треугольники каждый раз достаточно малы и никогда не "сталкиваются" друг с другом.

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

Эта величина больше единицы (топологической размерности линии), но меньше Евклидовой размерности плоскости, d = 2, на которой расположена кривая. Обратим внимание на то, что кривая, получаемая в результате n-й итерации при любом конечном n, называется предфракталом, и лишь при n, стремящемся к бесконечности, кривая Коха становится фракталом. Таким образом, снежинка Коха представляет собой линию бесконечной длины, ограничивающую конечную площадь. Используя определение фрактала, смело утверждать, что это множество - фрактал.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Задумывались ли вы о том, что в русском алфавите есть буквы, которых вполне можно было бы обойтись? Зачем же они нужны?Ъ и ЬТвердый и...

    Задумывались ли вы о том, что в русском алфавите есть буквы, которых вполне можно было бы обойтись? Зачем же они нужны? Ъ и Ь Твердый и...
    Наршараб – это кисло-сладкий гранатовый соус – один из знаменитых ингредиентов кавказской кулинарии. Он легко станет любимым продуктом и...
    Пикантную закуску можно приготовить для праздника или встречи гостей. Приготовление: Отрежьте ножки от шляпок, посолите их и обжарьте на...
    Иметь много денег – приятно. Но к чему снятся деньги? К чему снится мелочь? Стоит разобраться. К чему снится мелочь – основное...
    Этот способ приготовления болгарского перца давным-давно привезла моя мама из Молдавии - так тогда называлась Молдова, входящая в состав...
    Ароматные сладкие перцы, запечённые в духовке, а потом протушенные с соусом. Вкуснейший овощной гимн лету!Европейская Ингредиенты 1 кг...