Das Fraktal, das 12 Jahre lang an meiner Wand hing
(chriskw.xyz)- In der Mittelschule zeichnete ich auf Millimeterpapier ein Muster aus sich replizierenden Quadraten, ließ es 12 Jahre lang an der Wand hängen und analysierte es später als ein Fraktal namens wallflower, mit Bezügen zu L-Systemen, linearer Algebra, Zahlensystemen und Verallgemeinerungen in höhere Dimensionen
- Ausgehend von einem Quadrat wird die aktuelle Form nach oben, unten, links und rechts kopiert; im nächsten Schritt wird sie in Richtungen kopiert, die um etwa 27 Grad gedreht sind. Dieses Verfahren erzeugt ein Fraktal, das die Ebene füllt
- Die einfachen L-System-Regeln
R → RLR,L → RLLerzeugen eine ähnliche Kontur, aber nicht dieselbe Figur; häufiger dokumentierte Formen sind unter anderem Quadratic von Koch island, Quadratic Flake und Minkowski Sausage - wallflower lässt sich als matrixbasiertes Zahlensystem interpretieren, mit der Matrix (M=\begin{bmatrix}-2&1\1&2\end{bmatrix}) als Basis und Richtungsvektoren als Ziffern; (\det(M)=-5) kehrt bei jeder Iteration die Orientierung um
- Eine 3D-Verallgemeinerung wirkte wegen Symmetrie- und Überlappungsproblemen unbeholfen; in 4D ließ sich mit einer Matrix, die die Bedingungen erfüllt, eine orthotopeflower erzeugen, doch unter denselben Einschränkungen scheinen nur 1D, 2D und 4D möglich zu sein
Der Ursprung des Fraktals an der Wand
- In der Mittelschule kritzelte ich auf Millimeterpapier ein Muster, bei dem Quadrate wiederholt zusammengefügt und kopiert wurden, und hängte es später zur Analyse an die Wand
- Wegen seiner blütenblattartig ausladenden Struktur und der Geschichte, dass es lange an der Wand hing, nenne ich dieses Fraktal wallflower
- Das ursprünglich gezeichnete Verfahren war wie folgt
- Mit einem einzelnen Quadrat beginnen
- Vier Kopien des aktuellen Zustands links, rechts, oben und unten platzieren
- Danach vier Kopien des aktuellen Zustands in denselben vier Richtungen platzieren, aber an Positionen, die um etwa 27 Grad im Uhrzeigersinn geneigt sind
- Die beiden Platzierungsarten abwechselnd wiederholen, bis das Millimeterpapier voll ist
- Dieses Verfahren kann bei Wiederholung, ähnlich der Gosper-Kurve, beliebige Bereiche der Ebene überdecken, und auch jeder Zwischenzustand kann die Ebene parkettieren
Fast wie ein L-System, aber mit anderer Kontur
- Vor etwa einem Jahr stellte ich fest, dass sich diese Kontur mit einem L-System erzeugen lässt
- Die verwendeten Regeln bestehen nur aus einer 90-Grad-Drehung nach rechts (R) und nach links (L)
- Der Startstring ist (RRRR)
- In jeder Iteration wird (R \rightarrow RLR), (L \rightarrow RLL) ersetzt
- Die ersten paar Schritte sahen aus wie dieselbe Kontur wie bei wallflower, doch beim Erstellen einer Animation zeigte sich, dass die beiden Methoden ab der 4. Iteration auseinanderlaufen
- Der Unterschied entsteht durch die Art, wie die Kopien platziert werden
- Die „Drag-and-drop“-Methode platziert die Kopien der 3. Iteration direkt oben, unten, links und rechts relativ zum Mittelpunkt
- Die L-System-Methode platziert die Kopien in diagonalen Richtungen
- Die vom L-System erzeugte Form ist bereits an mehreren Stellen dokumentiert
- „Quadratic von Koch island“ in der List of fractals
- „Quadratic Flake“ bei der Koch-Schneeflocke
- Minkowski Sausage
- Jeffrey Ventrellas Mandelbrot’s Quartet
- Für die Drag-and-drop-Variante, die an der Wand hing, ließ sich per Google-Bildersuche und Wikipedia-Recherche keine identische Form finden
- Ich fand mit (L \rightarrow RLR), (R \rightarrow LLR) Regeln, die zu wallflower passen, doch diese Regeln bewirken, dass sich die Zeichenrichtung der Kontur bei jedem Schritt umkehrt
Wie man das Fraktal zählt
- Da wallflower vom Ursprung nach außen wächst, kann man es als Zuordnung zwischen natürlichen Zahlen und Gitterkoordinaten betrachten
- Das zentrale Quadrat wird als 0 gesetzt, und die vier im ersten Schritt hinzugefügten umliegenden Quadrate werden im Uhrzeigersinn mit 1, 2, 3, 4 nummeriert
- In der nächsten Iteration könnte man von oben nach unten und von links nach rechts durchnummerieren, doch diese Methode passt nicht gut zur rekursiven Struktur
- Nutzt man aus, dass jedes Blütenblatt eine Kopie der vorherigen Iteration ist, lassen sich die Nummern sowohl innerhalb der Blütenblätter als auch zwischen ihnen vom Zentrum nach außen wiederverwenden
- In dieser Nummerierung bilden Vielfache von 5, (5n+1), Vielfache von 25 usw. geneigte Gittermuster
- Der Grund ist, dass die Anzahl der Quadrate pro Iteration als (1, 5, 25, 125, ...) wächst
- Jede Iteration fügt zum vorherigen Zustand vier Kopien hinzu, also insgesamt das 5-Fache
- Deshalb passen Potenzen von 5 und die Darstellung im Fünfersystem gut zur Struktur
Ein Zahlensystem mit einer Matrix als Basis
- Zerlegt man eine Zahl wie in Stellenwerte zur Basis 5, kann man die den einzelnen Stellenwerten entsprechenden Vektoren addieren, um die Position im Fraktalgitter zu finden
- 231 wird zum Beispiel als (200 + 30 + 1) betrachtet, und die jeweiligen Positionsvektoren werden addiert, um die Position von 231 zu erhalten
- Einstellige Werte werden als Richtungsvektoren definiert
- (\vec{0}=(0,0))
- (\vec{1}=(1,0))
- (\vec{2}=(0,1))
- (\vec{3}=(-1,0))
- (\vec{4}=(0,-1))
- Stellenwerte der Form (10^n) wurden zunächst durch Fallunterscheidungen nach geraden und ungeraden Exponenten ausgedrückt, doch durch wiederholtes Anwenden einer einzigen Matrix lassen sie sich ohne Bedingungen berechnen
- Die verwendete Matrix lautet wie folgt
[ M=\begin{bmatrix} -2 & 1 \ 1 & 2 \end{bmatrix} ]
- Für diese Matrix gilt (M^2=5I), sodass die Größe alle zwei Schritte auf das 5-Fache ausgerichtet wird
- Daher lässt sich schreiben
[ \overrightarrow{(10^n)}=M^n\vec{1} ]
- Diese Struktur kann man statt als übliches Stellenwertsystem mit skalarer Basis und skalaren Ziffern als Zahlensystem mit Matrixbasis und Vektorziffern betrachten
Die Determinante trennt die beiden Fraktale
- Die Determinante von (M) ist (\det(M)=-5); wegen der negativen Determinante kehrt sich die Orientierung des Raums bei jeder Iteration um
- Durch diese Umkehrung scheinen im Vergleich zur ursprünglichen Nummerierung die Positionen von Werten wie 20 und 40 vertauscht zu sein
- Um die Umkehrung zu vermeiden, kann man eine Matrix mit positiver Determinante wählen
[ M'=\begin{bmatrix} 2 & 1 \ -1 & 2 \end{bmatrix} ]
[ \det(M')=5 ]
- (M') kehrt die Orientierung nicht um, sondern dreht die Ziffernvektoren fortlaufend im Uhrzeigersinn; verwendet man diese Matrix als Basis, erhält man die zuvor erwähnte L-System-Version
- Der Unterschied zwischen den beiden Fraktalen ist folgender
- wallflower entsteht aus (M) mit (\det(M)=-5)
- Die verbreitetere Familie der quadratic flakes entsteht aus (M') mit (\det(M')=5)
- Der Absolutwert 5 der Determinante passt zur Struktur, bei der die Größe des Fraktals in jeder Iteration um den Faktor 5 wächst
- Ist die Determinante größer, wachsen die Kopien zu schnell und es entstehen Lücken
- Ist die Determinante kleiner, wachsen die Kopien zu langsam und die Iterationen überlappen
- Der Winkel von etwa 27 Grad hängt mit dem Vektor (\langle1,2\rangle) zusammen, der sich aus den Bedingungen ganzzahliger Koordinaten, Determinante (\pm5) und Vektorlänge (\sqrt5) ergibt
- Der Winkel dieses Vektors ist (\arctan(2/1)\approx63.43^\circ)
- Bezogen auf die y-Achse ist er um etwa 27 Grad versetzt
Additionsregeln und Überträge
- Vektoraddition passt gut zu den entfalteten Stellenwerten, verhält sich aber anders als gewöhnliche Zahlenaddition, etwa weil (\vec{2}+\vec{2}\neq\vec{4})
- Die Werte 1 bis 4 sollte man eher als Richtungen oben, rechts, unten und links betrachten denn als eigentliche Zahlen
- Entgegengesetzte Richtungen heben sich gegenseitig auf
- (\vec{1}+\vec{3}=\vec{0})
- (\vec{2}+\vec{4}=\vec{0})
- Erstellt man eine Tabelle der Kombinationen von Einheitsvektoren, werden manche Additionsergebnisse zu zweistelligen Werten
- Deshalb muss man beim Addieren großer Zahlen wie bei der gewöhnlichen schriftlichen Addition Überträge behandeln
- Berechnet man zum Beispiel (\vec{22}+\vec{1}), ergibt sich wegen der Regel (\vec{2}+\vec{1}=\vec{13}) das Resultat 133
- Ob dieses Additionssystem allgemein funktioniert, wird nicht bewiesen und bleibt den Lesern zur Überprüfung überlassen
Verwandte Zahlensysteme und Forschung
- Das Zahlensystem des wallflower-Fraktals steht in Verbindung mit anderen Stellenwertsystemen, die nicht nur natürliche Zahlen als Ziffern verwenden
- Balanced Ternary verwendet (-1,0,1) als Ziffern und 3 als Basis; wallflower lässt sich als zweidimensionales Analogon dazu sehen, bei dem Ziffern für die positive und negative y-Richtung ergänzt werden
- Generalized balanced ternary wird über Permutoeder-Gitter auf beliebige Dimensionen verallgemeinert und ergibt in 2D ein hexagonales Gitter
- Quater-imaginary Base ist ein System mit (2i) als Basis und 0, 1, 2, 3 als Ziffern
- (M') kann als Basis betrachtet werden, die der komplexen Zahl (2+i) entspricht; Timothy James McKenzie Makarios’ Balanced base 2+i (and some gratuitous fractals) behandelt dieses Konzept
- Als verwandte Materialien fand ich folgende
- Project BinSys: ein Projekt zur Suche nach Matrixbasen mit Determinante 2
- Andrew Vinces Replicating Tesselations: behandelt Fraktale, Parkettierungen, lineare Algebra und Zahlensysteme strenger und erweitert sie über (\mathbb{Z}^2) hinaus auf allgemeine Gitter
Erweiterung in 3D und 4D
- In 3D betrachtete ich eine „3D-plus“-Struktur, die mit einem Würfel beginnt und ihn in sechs Richtungen kopiert
- Für die 3x3-Matrix waren die gewünschten Bedingungen folgende
- Alle Einträge müssen ganzzahlig sein
- Jeder Spaltenvektor muss vom Ursprung Hamming-Abstand 3 haben
- Da in jeder Iteration 6 Kopien hinzugefügt werden, muss die Größe um den Faktor 7 wachsen, und die Determinante muss (\pm7) sein
- Ich fand eine 3x3-Matrix, die die Bedingungen erfüllt, doch die Visualisierung ergab eine Iteration, die zusammengedrückt wirkte, wobei frühere Iterationen sichtbar wurden
- Fügte man zwei 3D-plus-Strukturen hinzu, ließen sich die leeren Bereiche füllen, und die 8 Mittelpunkte ordneten sich wie die Ecken eines verzerrten Würfels an
- Für eine symmetrischere Platzierung könnte es ausreichen, dass jede Spalte orthogonal zu den anderen ist und dieselbe Länge hat; in 3D scheint das aber wegen der Bedingung ganzzahliger Koordinaten nicht möglich zu sein
- In 4D passen die Bedingungen zusammen
- Die Summe der Quadrate der Komponenten jedes Spaltenvektors muss 3 sein
- Möglich ist eine Konstruktion, bei der von 4 Komponenten drei (\pm1) sind und eine 0 ist
- Mit der folgenden 4x4-Matrix wird ein 4D-Fraktal konstruiert
[ \begin{bmatrix} 0 & -1 & -1 & -1 \ 1 & 0 & -1 & 1 \ 1 & 1 & 0 & -1 \ 1 & -1 & 1 & 0 \end{bmatrix} ]
- Dieses 4D-Fraktal nenne ich orthotopeflower
- Die 4D-Visualisierung wird behandelt, indem man 3D-Schnitte mit festem (w)-Wert betrachtet oder ein vierdimensionales Fenster darstellt, indem man 7x7-Gitter innerhalb eines 7x7-Gitters platziert
- In einem 31x31x31x31-Sichtfenster scheint es sich nach außen auszudehnen, ohne die in 3D beobachtete übermäßige Stauchung
Höhere Dimensionen und die letzte Wendung
- Erweitert man dieselben Einschränkungen auf höhere Dimensionen, scheinen nur 1D, 2D und 4D die Bedingungen zu erfüllen
- 1D ist balanced ternary
- 2D ist wallflower oder quadratic flake
- 4D ist orthotopeflower
- Die in 4D gewählte Matrix kodiert das Quaternion (i+j+k); darüber lässt sich eine balanced nonary quaternion base mit Basis (i+j+k) und Ziffern (0,\pm1,\pm i,\pm j,\pm k) denken
- Ob dieses Quaternion-System tatsächlich funktioniert, ist unklar; ich überlasse es meinem zukünftigen Ich, das mehr Mathematik weiß
- Der Versuch, nach einem Burnout das Interesse an Mathematik und Programmierung wiederzubeleben, verwandelte eine alte Kritzelei in eine Erkundung, die zu Fraktalen, Zahlensystemen, linearer Algebra und höheren Dimensionen führte
- Als letzte Wendung stimmen die Visualisierungen des Artikels nicht mit dem tatsächlichen Wandfraktal im Thumbnail überein
- Die 4. Iteration an der echten Wand wurde um etwa 27 Grad in die entgegengesetzte Richtung kopiert
- Damals dachte ich, dass ein fortlaufendes Neigen in dieselbe Richtung von der Achse wegführen würde, und wollte das korrigieren; die Struktur von (M) korrigiert sich jedoch bereits bei jedem Schritt selbst
- Der Artikel endet mit dem Hinweis, dass auch Donald Knuth einmal eine wrong turn machte, als er ein Fraktal an die Wand hängte
1 Kommentare
Hacker-News-Kommentare
Ein aufschlussreicher und sorgfältig geschriebener Beitrag; die 3D-Visualisierung fand ich besonders gut.
Das erinnerte mich an etwas, das ich früher einmal gebaut habe, als ich mit rekursiver Dezimierung herumgespielt habe, um aus beliebigen Bildern fraktalähnliche Effekte zu erzeugen.
Man kann es hier selbst ausprobieren: https://jsfiddle.net/nicobrenner/a1t869qf/
Einfach ein paar Mal auf
Blursort 2x2klicken, um Frames zu erzeugen, und dannAnimatedrücken. Bilder lassen sich auch kopieren/einfügen, und alles läuft komplett im Browser, ohne Backend. Auf Mobilgeräten nicht zu empfehlen.Ich habe mich da hineingesteigert und glaube, mit einem L-System eine Form erstellt zu haben, die die „wallflower“ füllt.
https://onlinetools.com/math/l-system-generator?draw=AB&skip...
Wenn ich noch einmal darüber nachdenke, erzeugt das vermutlich ein anderes Fraktal, aber sicher bin ich mir nicht.
https://onlinetools.com/math/l-system-generator?draw=ABCD&sk...
Die vorige füllt die Koch island.
Ich dachte, das wäre leichte Lektüre, aber weil ich arbeiten musste, konnte ich Teile nur überfliegen.
Ich will später zurückkommen und mit den Dingen herumspielen; der Beitrag ist wirklich gut gemacht.
Der Beitrag ist viel tiefgehender und anspruchsvoller als erwartet; man spürt die Hingabe.
Ich würde den Autor gern fragen, was er heute empfehlen würde, an die Wand eines Kinderzimmers zu hängen.
Am Ende des Beitrags habe ich einen kleinen Absatz über Burnout eingefügt. In meinem Fall lag die Wurzel des Problems darin, dass ich die Faszination und Neugier für Mathematik und Programmierung verloren hatte; beim Schreiben dieses Beitrags konnte ich wieder an jenes kindliche Staunen anknüpfen, das ich früher so leicht empfand.
Ich habe die Arithmetik mit zwei zweistelligen Zahlen überprüft, und sie funktioniert tatsächlich.
Ich hatte erwartet, dass
41+14zu12wird. Denn wenn man zwei Felder nach rechts und zwei Felder nach oben addiert, ergibt das zwei Felder nach rechts und zwei Felder nach oben.In der langen Addition unten verwende ich
=, um äquivalente Zeilen zu zeigen, also Umordnung der Terme(1+2=2+1), Zerlegung von Zahlen(41=40+1)und einstellige Addition(1+4=22).->verwende ich, wenn der Algorithmus eine Ziffer liefert, und<, wenn es in die nächste Spalte geht.41+14 = (40+1)+(10+4) = 40 + 10 + (1+4) = 40 + 10 + 22 -> 1s digit = 2 < 4 + 1 + 2 = 22 + 2 = 20 + 2 + 2 = 20 + 41 -> 10s digit = 1 < 2 + 4 = 0 -> done == 12Im Beitrag gibt es zwei unterschiedliche Zahlensysteme; in einem laufen
10, 20, 30, 40im Uhrzeigersinn, im anderen gegen den Uhrzeigersinn. In beiden laufen1, 2, 3, 4im Uhrzeigersinn. Die obige Addition bezieht sich auf das zweite System, das in der Additionstabelle verwendet wird, also das, bei dem die Zehnerstellen gegen den Uhrzeigersinn laufen.Im anderen System funktioniert es ebenfalls.
14+21sollte12ergeben.14+21 =10+20+42 ->2 <1+2+4 =13+4 =10+3+4 =10+31 ->1 <1+3 =0 ==12Ich frage mich, wie du auf das „middle out“-Nummerierungssystem gekommen bist.
Wenn ich allein an Mathematikproblemen arbeite, fallen mir solche inspiriert wirkenden Ideen kaum je ein.
Ich habe auch viel darüber nachgedacht, wie man das Fraktal programmatisch zeichnen könnte; der naheliegende Weg war, in der Mitte zu beginnen und nach außen zu vergrößern.
Es gibt eine Anekdote über Richard Feynman, wonach er im Hinterkopf immer etwa ein Dutzend zufälliger Probleme mit sich herumtrug, bei jeder erkennbaren Verbindung ein Stück vorankam, und wenn er eines schließlich löste, dachten die Leute, er habe es wie durch Magie spontan erkannt. Diesmal war es ein bisschen ähnlich, aber ich bin von diesem Niveau weit entfernt und schaffe das kaum mit einem einzigen Problem statt mit einem Dutzend.
An einem früheren Arbeitsplatz hatten wir das als großen Ausdruck an der Wand hängen.
https://raw.githubusercontent.com/cies/haskell-fractal/refs/... [17 MB, sorry, ist GitHub]
Der zur Erzeugung verwendete Haskell-Code ist auch dabei: https://github.com/cies/haskell-fractal
Besonders interessant fand ich den Prozess, der zur Funktion
sharpengeführt hat. Für die Kurvenanpassung habe ich ein inzwischen verschwundenes Tool verwendet: https://github.com/cies/haskell-fractal/blob/master/fractal....Das war ein schönes kleines Projekt.
Der Teil „ich beschloss, es meinem zukünftigen Ich zu überlassen, das mehr Mathematik kann“ spricht mich an.
Auch bei der Entscheidung, welchen Abschluss ich machen sollte, hatte eine Liste von Problemen großen Einfluss, die ich hätte lösen müssen, aber wegen fehlender Anleitung und fehlender Internetverbindung nicht lösen konnte. Die meisten waren Probleme der linearen Algebra.
Ich glaube, in der Musterformel ist ein Tippfehler. Die Formel direkt nach „Looking closely you might pick up on the pattern“ sollte nicht
5**n, sondern5**(n/2)sein, und nicht5**(n-1), sondern5**((n-1)/2).\overrightarrow{10*4}ist[0, 25], aber mit der ursprünglichen Formel kommt[0, 625]heraus.Außerdem heißt es zu Knuths Fehler in einem YouTube-Kommentar, sein Fraktal sei in Wirklichkeit korrekt gewesen und er habe nur Start- und Endpunkt verwechselt. Locker gesagt ist dieses Fraktal symmetrisch bezüglich einer Drehung um die Mitte, und genau diese Drehung hielt Knuth für falsch. So oder so hat er jedenfalls einen fraktalbezogenen Fehler gemacht, also bleibt die Schlussfolgerung bestehen.