Сніжинка Коха на JS з використанням Canvas. Використання середовища розробки додатків для створення сніжинки Коха Сніжинка Коха побудова

Ця фігура - один з перших досліджених вченими фракталів. Вона виходить з трьох копій кривої Коха, Яка вперше з'явилася в статті шведського математика Хельге фон Коха в 1904 році. Ця крива була придумана як приклад безперервної лінії, до якої не можна провести дотичну ні в одній точці. Лінії з такою властивістю були відомі і раніше (Карл Вейерштрасс побудував свій приклад ще в 1872 році), але крива Коха чудова простотою своєї конструкції. Не випадково його стаття називається «Про неперервну криву без дотичних, яка виникає з елементарної геометрії».

Написання функції, яка рекурсивно викликає себе, є одним із способів генерації фрактальної діаграми на екрані. Однак, що, якщо ви хочете, щоб рядки в вищевказаному Кантор встановлювалися як окремі об'єкти, які можна було переміщати незалежно? Рекурсивна функція проста і витончена, але це не дозволяє вам багато зробити, крім простого створення самого шаблону.

Ось правила. Криву Коха і інші фрактальні візерунки часто називають «математичними монстрами». Це пов'язано з непарним парадоксом, який виникає, коли ви застосовуєте рекурсивне визначення нескінченно багато разів. Якщо довжина вихідної стартової лінії дорівнює одиниці, перша ітерація кривої Коха дасть довжину лінії чотири третини. Зробіть це знову, і ви отримаєте шістнадцять-дев'ятий. У міру того як ви ітеріруете в нескінченність, довжина кривої Коха наближається до нескінченності. Проте, він вписується в крихітне кінцеве простір, надане прямо тут, на цьому папері!

Перші етапи побудови кривої Коха

Малюнок і анімація відмінно показують, як по кроках будується крива Коха. Перша ітерація - просто початковий відрізок. Потім він ділиться на три рівні частини, центральна добудовується до правильного трикутника і потім викидається. Виходить друга ітерація - ламана лінія, що складається з чотирьох відрізків. До кожного з них застосовується така ж операція, і виходить четвертий крок побудови. Продовжуючи в тому ж дусі, можна отримувати все нові і нові лінії (всі вони будуть ламаними). А то, що вийде в межі (це вже буде уявний об'єкт), і називається кривою Коха.

Оскільки ми працюємо на Землі обробки кінцевих пікселів, цей теоретичний парадокс не буде для нас фактором. Ми могли б діяти так само, як і з канторской безліччю, і писати рекурсивную функцію, яка итеративно застосовує правила Коха знову і знову. Тим не менш, ми будемо вирішувати цю проблему по-іншому, розглядаючи кожен відрізок кривої Коха як окремий об'єкт. Це відкриє деякі можливості дизайну. Наприклад, якщо кожен сегмент є об'єктом, ми можемо дозволити кожному сегменту рухатися незалежно від його вихідного місця розташування і брати участь у фізичному моделюванні.

Основні властивості кривої Коха

1. Вона неперервна, але ніде не диференційована. Грубо кажучи, саме для цього вона і була придумана - як приклад такого роду математичних «виродків».

2. Має нескінченну довжину. Нехай довжина вихідного відрізка дорівнює 1. На кожному кроці побудови ми замінюємо кожен зі складових лінію відрізків на ламану, яка в 4/3 рази довше. Значить, і довжина всієї ламаної на кожному кроці множиться на 4/3: довжина лінії з номером n дорівнює (4/3) n-1. Тому граничної лінії нічого не залишається, крім як бути нескінченно довгою.

Крім того, ми могли б використовувати випадковий колір, товщину лінії і т.д. Щоб відображати кожен сегмент по-різному. Щоб виконати нашу задачу обробки кожного сегмента як окремого об'єкта, ми повинні спочатку вирішити, що повинен робити цей об'єкт. Які функції він повинен мати?

Давайте розглянемо, що у нас є. З наведеними вище елементами, як і де ми застосовуємо правила Коха і принципи рекурсії? У цьому симуляції ми завжди стежили за двома поколіннями: поточними і наступними. Коли ми закінчили обчислювати наступне покоління, тепер стало актуальним, і ми перейшли до обчислення нового наступного покоління.

3. Сніжинка Коха обмежує кінцеву площу. І це при тому, що її периметр нескінченний. Це властивість може здатися парадоксальним, але воно очевидно - сніжинка повністю поміщається в коло, тому її площа свідомо обмежена. Площа можна порахувати, і для цього навіть не потрібно особливих знань - формули площі трикутника і суми геометричної прогресії проходять в школі. Для зацікавлених обчислення наведено нижче дрібним шрифтом.

Ми будемо застосовувати подібну техніку тут. Ось як виглядає код. Зрозуміло, вищенаведене виключає справжню «роботу» тут, яка визначає ці правила. Як ми розбиваємо один сегмент лінії на чотири, як описано правилами? Побудова фрактала засноване на концепції нескінченності. Крок 2: Ми розділимо цей сегмент на три рівні частини, а на центральній частині піднято рівносторонній трикутник. Крок 3: На чотирьох нових сегментах ми виконаємо крок.

Перетніть інструмент між двома об'єктами, клацніть по колу. Сніжинка Коха - це особлива фрактальная крива, побудована математиком Коха, починаючи з мережива Коха. Це крива, побудована на всі боки рівностороннього трикутника. Мереживо Коха побудовані на кожній зі сторін трикутника.

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

У наступній таблиці наведено перші кроки побудови кривої. Щоб отримати фрактал, вам просто потрібно вставити три копії кривої вздовж сторін трикутника. Зверніть увагу, що друга фігура - зірка Давида. Кінцевим результатом є замкнута крива, побудована на рівнобічному трикутнику. Можна відзначити, що фрита містить шестикутну зірку. Конструкція дуже схожа на фрактальну п'ятикутну.

Існує ще один спосіб побудувати сніжинки. Конструкцію, описану вище, можна визначити як конструкцію шляхом додавання, оскільки стартова фігура, трикутник, додає інші елементи. Існує підструктура, яка замість вихідної фігури видаляє елементи.

4. Фрактальна розмірність дорівнює log4 / log3 \u003d log 3 4 ≈ 1,261859 .... Акуратне обчислення потребують чималих зусиль і докладних роз'яснень, тому тут наведено, скоріше, ілюстрація визначення фрактальної розмірності. З формули статечної залежності N (δ) ~ (1 / δ) D, де N - число пересічних квадратиків, δ - їх розмір, D - розмірність, отримуємо, що D \u003d 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 \u003d 3 · 4 n -1 трикутничків. Довжина сторони кожного з них становить третину від сторони трикутника, добудованого на попередньому кроці. Значить, вона дорівнює (1/3) n. Площі пропорційні квадратах сторін, тому площа кожного трикутнички дорівнює . При великих значеннях n це, до речі, дуже мало. Сумарний внесок цих трикутничків в площа сніжинки дорівнює T n · S n \u003d 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 \u003d log 3 4 ≈ 1,261859 .... Акуратне обчислення потребують чималих зусиль і докладних роз'яснень, тому тут наведено, скоріше, ілюстрація визначення фрактальної розмірності. З формули статечної залежності N(δ ) ~ (1/δ ) D, де N - число пересічних квадратиків, δ - їх розмір, а D - розмірність, отримуємо, що D \u003d 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.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 році (рис. 2.2), описується кривої, складеної з трьох однакових фракталів розмірності. Кожна третину сніжинки будується итеративно, починаючи з однієї зі сторін рівностороннього трикутника. Нехай - початковий відрізок. Приберемо середню третину і додамо два нових відрізка такої ж довжини, як показано на рис. 2.3. Назвемо отримане безліч. Повторимо цю процедуру багато разів, на кожному кроці замінюючи середню третину двома новими відрізками. Позначимо через фігуру, отриману після n-го кроку.

Мал. 2.2. сніжинка Коха

Інтуїтивно ясно, що послідовність кривих сходиться до деякої граничної кривої К. Ми проведемо суворе математичне дослідження збіжності таких послідовностей кривих та інших множин в п. 3.5 і в дод. А.3. Поки що припустимо, що крива К існує, і розглянемо деякі її властивості.

Мал. 2.3. а Б В Г)

Якщо взяти копію К, зменшену в три рази то все безліч До можна скласти з таких копій. Отже, ставлення самоподібності (2.1) виконується при зазначених N і, а розмірність фрактала буде:

Ще одна важлива властивість, якою володіє межа сніжинки Коха - її нескінченна довжина (см. Теорему 2.1.1). Це може здатися дивним читачеві, звиклому мати справу з кривими з курсу математичного аналізу. Зазвичай гладкі або хоча б кусочно-гладкі, вони завжди мають кінцеву довжину (у чому можна переконатися інтеграцією). Мандельброт в зв'язку з цим опублікував ряд цікавих робіт, в яких досліджується питання про вимірювання довжини берегової лінії Великобританії. В якості моделі він використовував фрактальну криву, що нагадує кордон сніжинки за тим винятком, що в неї введено елемент випадковості, що враховує випадковість в природі. В результаті виявилося, що крива, що описує берегову лінію, має нескінченну довжину.

Фрактальна сніжинка - один з найвідоміших і найзагадковіших геометричних об'єктів - описана Хельгой фон Кох ще на початку нашого століття. За традицією її називають у нас в літературі сніжинкою Коха. Це дуже "колючий" геометрична фігура, яку метафорично можна розглядати як результат багаторазового "множення" зірки Давида на саму себе. Шість її основних променів покриті безліччю великих і малих вершін- "голочок". Всякий мікроскопічний фрагмент контуру сніжинки як дві краплі води схожий на весь великий промінь, а великий промінь в свою чергу містить в собі нескінченну кількість таких же мікроскопічних фрагментів.

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



Схожі публікації