Два шляхи до одного і того ж трикутника
Стрілецький трикутник (Вацлав Стрілецький, 1915) можна побудувати двома повністю різними способами, які збігаються в точно ту саму форму, і бачити обидва є найшвидшим способом зрозуміти, що таке на практиці фрактал. Рекурсивний спосіб: візьміть заповнений трикутник, з’єднайте середини трьох його сторін, щоб викарбувати центральний перевернутий трикутник, і повторіть ту саму операцію для кожного з трьох кутових трикутників у кутах, назавжди.
sierpinski(triangle, depth): if depth == 0: draw(triangle); return mid = midpoints of triangle's three sides sierpinski(cornerTriangle(triangle.A, mid.AB, mid.CA), depth-1) sierpinski(cornerTriangle(mid.AB, triangle.B, mid.BC), depth-1) sierpinski(cornerTriangle(mid.CA, mid.BC, triangle.C), depth-1) // the middle triangle is never recursed into - it stays empty
Простір хаотичної гри: чистий випадковість, структурований результат
Другий конструктор ніяк не схожий на перший і не має жодної рекурсії. Зафіксуйте три вершини трикутника. Почніть з будь-якої точки. Повторювально вибирайте одну з трьох вершин випадковим чином, перестрибуйте наполовину від поточної точки до вибраної вершини та малюйте нову точку. Робіть це кілька тисяч разів і, дивовижно, той самий трикутник Sierpinski виникає з того, що здається чистим шумом.
point = випадкова точка всередині трикутника повторюйте тисячі разів: вершина = вершини[випадкове_ціле(0, 2)] point = середина(point, вершина) // перестрибуємо наполовину до обраної вершини малюємо(point) // після кількох перших ітерацій, // кожна начерчена точка лежить на фракталі Це називається грою хаосу (Барнслі, 1988), і вона працює тому, що правило перестрибування наполовину є точною ітеративною функціональною системою, яка генерує трикутник рекурсивно, з іншого боку: рекурсія поділяє простір зверху вниз на менші та менші копії, а гра хаосу є марковським процесом, довгострокова розподілена відвідуваність точок якого є тим самим самосхожим набором — два погляди на одне й те саме відображення скорочення.
point = randomPointInsideTriangle()
repeat many thousands of times:
vertex = triangle.vertices[randomInt(0, 2)]
point = midpoint(point, vertex) // jump halfway toward the chosen vertex
plot(point) // after the first few iterations,
// every plotted point lies on the fractal
Розмір Хаусдорфа: не лінія, не площина
Сієпрінський трикутник – це ні одна вимірна крива, ні площа поверхні, заповнена фігурою — він має нульову площу (на кожному етапі поділу видаляється точно 1/4 від залишеної площі, і повторюючи це нескінченно, залишається жодної), але й не є простою кривою. Його розмір Хаусдорфа точно це відображає: при збільшенні трикутника вдвічі він розкладається на рівно 3 копії себе (не 4, оскільки середня частина відсутня), і вимірювання D розв’язують рівняння 2^D = 3:
D = log(3) / log(2) ~ 1.585 // порівняно: твердий квадрат, збільшений вдвічі, дає 4 копії => log(4)/log(2) = 2 (звичайне 2D) // лінійний сегмент, збільшений вдвічі, дає 2 копії => log(2)/log(2) = 1 (звичайне 1D) Розмір приблизно 1.585 — точне, неметафоричне твердження, що трикутник заповнює простір більш повно, ніж крива, але менш повно, ніж тверда площа, і це той самий коефіцієнт самоподібності (log(копій)/log(факторів масштабування)), який використовується для обчислення розміру будь-якого іншого точно самосхожого фракталу, узбереж та інших, просто з різною кількістю копій і факторами масштабування.
D = log(3) / log(2) ~ 1.585 // compare: a solid square scaled by 2 makes 4 copies => log(4)/log(2) = 2 (ordinary 2D) // a line segment scaled by 2 makes 2 copies => log(2)/log(2) = 1 (ordinary 1D)
Визначення сиєріцького трикутника за допомогою біноміальних коефіцієнтів
Візьміть біноміальний трикутник коефіцієнтів, і забарвте клітинку чорним кольором, якщо її значення є непарним, та білим кольором, якщо воно парне (відповідно обчисліть кожен елемент за модулем 2). Отриманий малюнок, розширений на достатню кількість рядків, є сиєріцьким трикутником — чисто числове об’єкт (які значення коефіцієнтів біноміального розкладу є непарними), що відтворює точно ту саму самоподібну форму, як і геометричний рекурсивний процес та гра з випадковим хаосом, ця випадковість виявляється не випадковою: всі троє є наслідками однієї основної бінарної самоподібності.
Frequently asked questions
Як чисто випадковий процес може утворювати точний геометричний фрактал?
Це пов'язано з тим, що правило середини стрибка в геймі хаосу математично еквівалентне ітераційній системі, яка генерує трикутник шляхом рекурсивного поділу - це просто застосовується як послідовність випадкових окремих точок, які сходяться до розподілу форми, а не як верх-вниз рекурсивний виріз. При достатній кількості ітерацій накладені точки точно заповнюють однакову самосхожую множину.
Чи має трикутник Серпінського якусь площу?
В межах ліміту - ні. Кожен етап поділу видаляє чверть залишеної заповненої площі, і повторюючи це нескінченну кількість разів, залишається нульова площа. Це все ще не проста одновимірна крива, що саме пояснює те, що її гауссівська розмірність становить приблизно 1,585, яка строго знаходиться між 1 і 2.
Чи є зв'язок з трикутником Паскаля випадковістю?
Ні. Колірування трикутника Паскаля залежно від того, чи є кожен біноміальний коефіцієнт непарним чи парним, утворює малюнок Серпінського через однакову двійкову, самосхожу рекурсивну структуру, яка генерує трикутник геометрично - це інший математичний шлях до ідентичної основної закономірності, а не випадковість.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Sierpinski Triangle і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Sierpinski Triangle