Dwa ścieżki do takiego samego trójkąta
Trójkąt Sierpinskiego (Wacław Sierpiński, 1915) można zbudować za pomocą dwóch całkowicie różnych procesów prowadzących do dokładnie takiej samej figury, a widzenie obu jest najświeższym sposobem na zrozumienie, co to naprawdę fraktal. Procedura rekurencyjna: podzielmy wypełniony trójkąt połączeniem punktów srodkowych jego trzech boków, aby wykopać centralny odwrócony trójkąt, a następnie powtarzaj tę samą operację dla każdego z trzech pozostałych rogowych trójkątów, nieskończenie often.
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
Gra z chaosem: pura losowości, strukturalny wynik
Druga konstrukcja nie przypomina ani trochę pierwszej i nie zawiera żadnej rekurencji. Ustal trzy wierzchołki trójkąta. Rozpocznij od dowolnego punktu. Powtarzaj losowanie jednego z trzech wierzchołków, skacując po pół drogi między bieżącym punktem a wybranym wierzchołkiem, a następnie rysuj nowy punkt. Po kilku tysiącach powtórzeń, niewiarygodnie, taki sam trójkąt Sierpinskiego pojawia się z tego, co wygląda na puro szum.
punkt = losowyPunktWTrójkącie() powtarzaj wiele tysięcy razy: wierzchołek = triangle.vertices[randomInt(0, 2)] punkt = srodek(punkt, wierzchołek) // skacznij po pół drogi ku wybranemu wierzchołkowi rysuj(punkt) // po kilku pierwszych iteracjach, // każdy rysowany punkt leży na fraktale
To nazywa się grą z chaosem (Barnsley, 1988), a działa dlatego, że zasada skoku po pół drogi jest dokładnie taka sama iterowanym systemem funkcji, który generuje trójkąt rekurencyjnie, patrząc na to w odwrotnej kolejności: rekurencja podzieliła przestrzeń top-down na coraz mniejsze kopie, podczas gdy gra z chaosem jest procesem Markowa, którego rozkład długoterminowy odwiedzanych punktów jest dokładnie tą samą zbiorowością samoszybką — dwie perspektywy tego samego podstawowego mapowania kontraktora.
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
Dyament Hausdorffa: nie linia, ani powierzchnia
Trójkąt Sierpinskiego nie jest ani jednowymiarową krzywą, ani dwuwymiarowym obszarem zapełnionym — ma zero pole (każde kroku podziału usuwa dokładnie 1/4 pozostałego pola zapełnionej części, a powtarzanie tego nieskończenie often zostawia puste) jednak nie jest ani prosta krzywa. Dyament Hausdorffa precyzyjnie odzwierciedla to: skalując trójkąt o czynnik 2, rozkłada się on dokładnie na 3 kopie siebie (a nie 4, ponieważ brakuje środkowej części), a dyament D rozwiązuje równanie 2^D = 3:
D = log(3) / log(2) ~ 1.585 // porównaj: kwadrat solider skaliowany o czynnik 2 tworzy 4 kopie => log(4)/log(2) = 2 (przypadek standardowy dwuwymiarowy) // odcinek linii skaliowany o czynnik 2 tworzy 2 kopie => log(2)/log(2) = 1 (przypadek standardowy jednowymiarowy) Dyament około 1.585 — dokładnie między 1 a 2 — jest precyzyjnym, nie metaforycznym stwierdzeniem, że trójkąt wypełnia przestrzeń bardziej niż prosta krzywa, ale mniej niż obszar zapełniony, i to samo stosunek samosimilarności (log(kopii)/log(czynnika skali)) jest używane do obliczenia dyamentu każdego innego dokładnie samosimilarnego fraktalu, w tym wybrukowań.
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)
Niezwykła pojawianie się: trójkąt Pascalowy modulo 2
Załóżmy trójkąt Pascalowy współczynników dwumianowych, a następnie kolorem czarnym narysujmy komórki o wartości nieparzystej i białymi te o parzystych (equivalently, obliczmy każdy wpis modulo 2). Otrzymany wzorzec rozszerzony do wystarczającej liczby wierszy jest trójkątem Sierpinskiego — czysty obiekt teorii liczbowy (których wpisy w tabeli kombinatorycznej są nieparzyste) powtarzający dokładnie tę samą samośmiernicową formę, jak geometryczna rekurencja i losowa gra chaosu. Okazuje się, że to nie jest przypadkowe: wszystkie trzy wynikają z tej samej podstawowej samośmierności binarnej.
Często zadawane pytania
Jak proces powszechnie losowy może wytworzyć dokładny fraktal geometryczny?
Dzięki temu, że zasada skoku pośredniego w grze chaosowej jest matematycznie taka sama iterowana funkcja systemu generująca trójkąt poprzez rekurencyjne podział - jest stosowana jako ciąg losowych punktów konvergujących do rozkładu długoterminowego kształtu, zamiast jako top-down rekurencyjny wykarcie. Dla wystarczającej liczby iteracji rysowane punkty wypełniają dokładnie taki sam zbior auto podobny.
Czy trójkąt Sierpinskiego ma jakieś pole powierzchni?
W granicy, nie - każda krotna operacja podziału usuwa czwartą część pozostałego wypełnionego pola, a powtarzanie tego nieskończenie wiele razy zostawia zero pola. To nadal nie jest prosta jednowymiarowa krzywa - co dokładnie dlatego, że jego wymiar Hausdorff-a około 1,585 leży stricte między 1 a 2.
Czy połączenie z trójkątem Pascalego jest przypadkiem?
Nie. Farbowanie trójkąta Pascalowego według tego, czy każdy współczynnik dwumianowy jest nieparzysty lub parzysty, tworzy wzór Sierpinskiego, ponieważ to samo binarne, auto podobne struktura rekurencyjna generuje trójkąt geometrycznie - jest to inny matematyczny sposób na osiągnięcie identycznego podstawowego wzoru, a nie niespójne przypadkowe połączenie.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Sierpiński Triangle i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Sierpiński Triangle