**Quelle: https://thlp-method.netlify.app/?de**

# METHODE ZUR TRANSFORMATION
# HÖHERDIMENSIONALER GITTER IN DIE EBENE

THLP: T = Transformation, H = höherdimensionaler, L = Lattices (Gitter), P = Plane (Ebene)

## EINE KURZE EINFÜHRUNG

Beim ersten Lesen ist es nicht notwendig, jedes Detail der folgenden Schritte zu verstehen. Ich empfehle, sie kurz zu überfliegen und sich dann zu fragen: Ist etwas besonders Kompliziertes passiert? Im Idealfall lautet die Antwort: Nein.

Es empfiehlt sich, zuallererst einen Blick auf die Visualisierungen zu werfen. Über den Number-Garden-Button in der Titel-Aufmachung lassen sie sich interaktiv erkunden. In Number Garden, Doppelklick an beliebiger Stelle oder „N“ drücken, um neue Beispielbilder zu erzeugen. Manchmal sind mehrere Versuche nötig, bevor ein besonders eindrucksvolles Motiv erscheint. Sie entstehen aus den unten beschriebenen einfachen Operationen, zeigen sich jedoch nicht als bloße Parkettmuster: Sie bilden bemerkenswert unterschiedliche visuelle Welten, die dennoch aus demselben definierten Konstruktionsverfahren hervorgehen.

Wer die Ergebnisse am Computer reproduzieren möchte, muss das Verfahren selbstverständlich vollständig verstehen. Bei der Umsetzung am Computer trifft man dann sehr wahrscheinlich auf die wahren Herausforderungen.

Punkte werden folgendermaßen geschrieben:

    P = [x, y, ...]

In der folgenden Erklärung wird nicht zwischen einem Punkt und seinem Ortsvektor unterschieden. Wenn P als Vektor bezeichnet wird, ist damit der Vektor vom Ursprung zum Punkt P gemeint.

Stellen wir uns Folgendes vor:

Im dreidimensionalen Raum lassen wir auf jeder der x-, y- und z-Achsen drei mögliche Positionen zu. Auf jeder Achse können wir uns einen Schritt in negativer Richtung bewegen, bei null bleiben oder uns einen Schritt in positiver Richtung bewegen:

    x, y, z in {-1, 0, 1}

![](latticeCube_de.png)

Abbildung 1. Ein 3 x 3 x 3 großer Gitterwürfel. Jede Koordinate kann einen der drei Werte -1, 0 oder 1 annehmen.

Nach dieser Regel lassen sich 27 verschiedene Punkte erreichen. Jede Achse bietet drei Zustände, daher beträgt die Gesamtzahl möglicher Punkte:

    3(x) * 3(y) * 3(z) = 27

Versuchen wir nun dieselbe Idee mit einem Gitter im sechsdimensionalen Raum.

Diesmal erhöhen wir zusätzlich die Ausdehnung auf drei Schritte in beide Richtungen. Jede Achse erlaubt somit die Positionen:

    {-3, -2, -1, 0, 1, 2, 3}

Auf jeder der sechs Achsen gibt es sieben mögliche Positionen. Das vollständige sechsdimensionale Gitter enthält daher:

    7<sup>6</sup> = 117.649 Punkte

All diese Punkte können wir einem zweidimensionalen quadratischen Gitter zuordnen.

Für eine solche quadratische Anordnung muss die Dimension des ursprünglichen Gitters gerade sein: 2, 4, 6, 8 und so weiter. Eine gerade Dimension ermöglicht diese quadratische Anordnung; eine ungerade Dimension ergibt in dieser Form kein Quadrat.

Detaillierter betrachten wir dies anhand der Beziehung:

    q<sup>2m</sup> = (q<sup>m</sup>)<sup>2</sup>

Hier ist q die Anzahl möglicher Zustände auf jeder Achse. Das Gitter erstreckt sich gleich weit in die negative und in die positive Richtung; dazwischen liegt null als zentraler Zustand. Beträgt die Ausdehnung in jede Richtung r, so gilt q = 2r + 1. Daher ist q stets ungerade. Der Wert m ist eine positive ganze Zahl; 2m ist somit die gerade Dimension des ursprünglichen Gitters.

Aufgrund dieser Beziehung lässt sich das höherdimensionale Gitter in der Ebene als ein q<sup>m</sup> mal q<sup>m</sup> großes Quadrat anordnen, das dieselbe Anzahl an Gitterpunkten enthält. Da q ungerade ist, ist auch die Seitenlänge q<sup>m</sup> ungerade. Das Quadrat besitzt deshalb genau in seinem Mittelpunkt einen Gitterpunkt, der als Ursprung dient.

Unser sechsdimensionales Objekt mit sieben möglichen Positionen auf jeder Achse besitzt dieselbe Eigenschaft: Der Ursprung liegt im Mittelpunkt aller Gitterpunkte.

Aber wie werden die Punkte zugeordnet?

Das zeigt das folgende Beispiel.

## DIE METHODE AN EINEM BEISPIEL VERSTEHEN

Wir verwenden ein sechsdimensionales Gitter mit den folgenden verfügbaren Koordinatenwerten:

    {-3, -2, -1, 0, 1, 2, 3}

Als Beispiel wählen wir den Punkt:

    P = [-3, 0, 1, -1, 3, -2]

### 1)

Zuerst teilen wir die sechs Komponenten in zwei gleich lange Blöcke:

    Px = [-3, 0, 1]
    Py = [-1, 3, -2]

Px erzeugt die horizontale Koordinate in der 2D-Ebene. Py erzeugt die vertikale Koordinate.

Andere Anordnungen sind möglich, die gewählte Reihenfolge der Komponenten muss jedoch während der gesamten Transformation beibehalten werden.

### 2)

Konzentrieren wir uns vorerst nur auf den ersten Block:

    Px = [-3, 0, 1]

### 3)

Für die Umwandlung wird zu jeder Komponente die Ausdehnung r addiert. In unserem Beispiel beträgt die Ausdehnung r = 3. Daher gilt:

    Ziffer = Komponente + 3

Diese Beziehung ergibt die folgende Zuordnung:

    Komponente    wird zu    Ziffer

       -3           ->         0
       -2           ->         1
       -1           ->         2
        0           ->         3
        1           ->         4
        2           ->         5
        3           ->         6

Der erste Block wird somit folgendermaßen umgewandelt:

    Px  = [-3, 0, 1]

Das Ergebnis lautet:

    Px' = [0, 3, 4]

### 4)

Nun entnehmen wir die drei Komponenten in ihrer bestehenden Reihenfolge als Zahl:

    034

### 5)

An dieser Stelle müssen wir 034 als Zahl im Siebenersystem behandeln. Wir verwenden die Basis 7, weil jede Achse sieben mögliche Koordinatenzustände besitzt.

Hier wird auch der Sinn des Ziffernbereichs von 0 bis 6 deutlich: Das Siebenersystem lässt genau diese sieben Ziffern zu. Wie in Schritt 3 gezeigt, werden die Koordinatenwerte durch die Addition von r aus dem Bereich {-r, ..., r} in den nichtnegativen Ziffernbereich {0, ..., 2r} verschoben. Erst dadurch lässt sich die Darstellung im Zahlensystem anwenden.

Die Umwandlung von 034 aus der Basis 7 in eine Dezimalzahl ergibt:

    034(Basis 7)
    = 0 * 7<sup>2</sup> + 3 * 7<sup>1</sup> + 4 * 7<sup>0</sup>
    = 0 + 21 + 4
    = 25

**Spezialisiert** Bei einem Array beginnt die Zählung der Stellen links. Bei einer Zahl beginnt die Zählung der Stellenwerte dagegen rechts. Möchte man die Stellen eines Arrays direkt den entsprechenden Stellenwerten einer Zahl zuordnen, muss die Ziffernfolge deshalb umgedreht werden: Aus 034 wird 430. In unserem Beispiel lesen wir 034 direkt in Leserichtung, weil sich das Verfahren so einfacher erklären lässt.

### 6)

Der vollständige erste Koordinatenblock ist nun zu einem einzigen Wert geworden:

    Px'' = [25]

### 7)

Wir wenden nun genau dasselbe Verfahren auf den zweiten Block an:

    Py = [-1, 3, -2]

Addieren wir wie in Schritt 3 die Ausdehnung r = 3 zu jeder Komponente, ergibt sich:

    Py' = [2, 6, 1]

Wir lesen diese Ziffern als die Zahl 261 zur Basis 7:

    261(Basis 7)
    = 2 * 7<sup>2</sup> + 6 * 7<sup>1</sup> + 1 * 7<sup>0</sup>
    = 98 + 42 + 1
    = 141

Somit gilt:

    Py'' = [141]

### 8)

Wir verbinden die beiden entstandenen Werte zu einem Punkt in der 2D-Ebene:

    P'' = [25, 141]

In diesem Stadium ist die Zuordnung abgeschlossen, das quadratische Gitter ist jedoch noch nicht um den Ursprung zentriert.

### 9)

Der Ursprung des ursprünglichen sechsdimensionalen Gitters liegt genau in der Mitte seiner Ausdehnung. Diese zentrierte Anordnung bilden wir nun in der 2D-Ebene nach.

Zuerst berechnen wir die Seitenlänge des Quadrats:

    Seitenlänge
    = √ Gesamtzahl der Punkte
    = √(7<sup>6</sup>)
    = 7<sup>3</sup>
    = 343

Entlang jeder Seite gibt es 343 Positionen. Da die Positionen beginnend bei 0 nummeriert werden, ist der erste Index 0 und der letzte Index 343 - 1 = 342. Das bedeutet nicht, dass es nur 342 Positionen gibt: Da sowohl 0 als auch 342 mitgezählt werden, enthält der Bereich alle 343 Positionen.

    Anzahl der Positionen = 343
    erster Index          = 0
    letzter Index         = 343 - 1 = 342

Der mittlere Index liegt genau zwischen dem ersten und dem letzten Index:

    Zentrierungswert
    = 342 / 2
    = 171

Wir ziehen diesen Zentrierungswert von beiden Komponenten von P'' ab:

    P''' = [25 - 171, 141 - 171]

Diese Verschiebung gleicht die bei null beginnende Zählung aus und erzeugt einen neuen Ursprung [0, 0] genau in der Mitte des 2D-Quadrats.

Wir führen die Berechnung aus und gelangen damit zum Endergebnis:

    P''' = [-146, -30]

### 10)

THLP hat nun den sechsdimensionalen Punkt:

    P = [-3, 0, 1, -1, 3, -2]

in den zweidimensionalen Punkt transformiert:

    P''' = [-146, -30]

In kompakter Form:

    [-3, 0, 1, -1, 3, -2]

                 THLP
                   |
                   v

            [-146, -30]

![](map2D_de.png)

Abbildung 2. Der transformierte Punkt auf dem zentrierten quadratischen 343 x 343-Gitter.

Die Vorwärtstransformation ist nun abgeschlossen.

## RÜCKABBILDUNG DER EBENE IN DEN HÖHERDIMENSIONALEN RAUM

Um die Visualisierungen zu erzeugen, müssen wir die Transformation auch in umgekehrter Richtung anwenden. Für jedes Pixel oder jede Gitterposition im Bild ermitteln wir den zugehörigen Vektor im höherdimensionalen Gitter. Ein separates Visualisierungsverfahren kann diesen Vektor anschließend verwenden, um die Farbe der gewählten Position zu bestimmen.

Die inverse Transformation durchläuft das vorherige Verfahren in umgekehrter Reihenfolge. Wir verwenden dasselbe Beispiel und beginnen mit dem in der Ebene erhaltenen Punkt:

    P''' = [-146, -30]

### 1)

Zuerst machen wir die Zentrierung rückgängig, indem wir zu beiden Koordinaten 171 addieren:

    P'' = [-146 + 171, -30 + 171]
        = [25, 141]

### 2)

Wir wandeln jede Koordinate wieder in ihre zuvor verwendete Darstellung zur Basis 7 zurück, einschließlich der führenden Null:

    25  = 034(Basis 7)
    141 = 261(Basis 7)

### 3)

Wir trennen die Ziffern, um die beiden verschobenen Koordinatenblöcke wiederherzustellen:

    Px' = [0, 3, 4]
    Py' = [2, 6, 1]

### 4)

Wir machen die Verschiebung der Vorwärtstransformation rückgängig. Da zuvor zu jeder Komponente die Ausdehnung r = 3 addiert wurde, ziehen wir nun von jeder Ziffer 3 ab:

    Komponente = Ziffer - 3

Diese Umkehrregel wenden wir auf beide Koordinatenblöcke an:

    Px' = [0, 3, 4]
     -> Px = [0 - 3, 3 - 3, 4 - 3]
           = [-3, 0, 1]

    Py' = [2, 6, 1]
     -> Py = [2 - 3, 6 - 3, 1 - 3]
           = [-1, 3, -2]

### 5)

Wir verbinden die beiden Koordinatenblöcke wieder in ihrer ursprünglichen Reihenfolge:

    P = [-3, 0, 1, -1, 3, -2]

Der Punkt in der zentrierten Ebene wurde nun auf seinen ursprünglichen sechsdimensionalen Vektor zurückgeführt:

    [-146, -30]

           inverse THLP
                 |
                 v

    [-3, 0, 1, -1, 3, -2]

Durch diese inverse Zuordnung lässt sich der höherdimensionale Vektor bestimmen, der zu jeder Position im Quadrat gehört. Dieser Vektor kann anschließend als Eingabe für das gewählte Visualisierungsverfahren dienen. Voraussetzung dafür ist, dass Dimension und Ausdehnung des zugrunde liegenden Gitters zuvor festgelegt und während der gesamten Zuordnung unverändert beibehalten werden.

## WIE DIE VISUALISIERUNGEN ENTSTEHEN

Wie kann jedem Punkt anhand seines zugehörigen Vektors eine Farbe zugewiesen werden?

Mein erstes Experiment verwendete den Abstand des Vektors vom Ursprung. Der Satz des Pythagoras lässt sich auf beliebig viele Dimensionen erweitern, indem man die Quadrate aller Vektorkomponenten addiert. Für unseren Beispielvektor ergibt sich:

    P = [-3, 0, 1, -1, 3, -2]

    Quadrierte Komponenten
    = [(-3)<sup>2</sup>, 0<sup>2</sup>, 1<sup>2</sup>, (-1)<sup>2</sup>, 3<sup>2</sup>, (-2)<sup>2</sup>]

    Quadrierter Abstand
    = Summe der Komponentenquadrate
    = 24

Der tatsächliche euklidische Abstand beträgt somit:

    Abstand = √24

In einer Computerimplementierung ist das Ziehen der Quadratwurzel nicht notwendig. Der quadrierte Abstand liefert bereits einen Wert, den eine gewählte Farbregel verwenden kann. Eine mögliche Regel lautet: Liefert die Berechnung für einen Bildpunkt den Wert 24, wird dieser Bildpunkt grün gefärbt.

Wendet man eine solche Regel auf jede Position im Quadrat an, entsteht die vollständige Visualisierung: Jede Position wird auf ihren höherdimensionalen Vektor zurückgeführt, und aus diesem Vektor wird nach der gewählten Methode der Wert berechnet, der die Farbe des entsprechenden Bildpunkts bestimmt.

Einer der wirkungsvollsten Ansätze bestand darin, den Komponentenblock Px des höherdimensionalen Vektors direkt mit dessen Komponentenblock Py zu vergleichen. Dabei wurden jeweils die Komponenten an derselben Stelle der beiden Blöcke einander zugeordnet. Die Beziehungen aus diesem komponentenweisen Vergleich konnten anschließend in Farbwerte übersetzt werden.

Nach einem ersten überraschenden Ergebnis wird man vermutlich versucht sein, mit vielen weiteren Regeln zu experimentieren. Diese Möglichkeiten werden hier nicht beschrieben. Die hier vorgestellten visuellen Ergebnisse unterscheiden sich erheblich, beruhen jedoch alle auf derselben grundlegenden Konstruktion, die in diesem Text beschrieben wird.

Eine weitere Beobachtung könnte hilfreich sein. Obwohl sowohl die Ausdehnung als auch die Dimension die Gesamtzahl der Gitterpunkte beeinflussen, prägen sie das Erscheinungsbild auf deutlich unterschiedliche Weise. In meinen Experimenten veränderte die Ausdehnung vor allem den Stil und die Textur des entstehenden Bildes, während die Dimension eher die flächenmäßige Ausdehnung der dargestellten Struktur bestimmte. Das ist möglicherweise das Gegenteil dessen, was man zunächst erwarten würde.

In der Browseranwendung Number Garden wird im Browser-Tab eine Kennung wie etwa 3-NOR-2c angezeigt. Durch Drücken der Taste „F“ lässt sie sich zusätzlich direkt in der Anwendung einblenden. Die erste Zahl, in diesem Beispiel die 3, verdient besondere Aufmerksamkeit: Sie bezeichnet die Ausdehnung und hat einen besonders starken Einfluss auf den charakteristischen Ausdruck des Graphen. Der Wert gilt sowohl für die positive als auch für die negative Achsenrichtung. Eine Ausdehnung von 3 umfasst somit die Koordinatenwerte {−3, −2, −1, 0, 1, 2, 3}. Es lohnt sich daher, diese erste Zahl im Blick zu behalten und ihre Veränderung mit dem Erscheinungsbild der erzeugten Graphen zu vergleichen.

Der übrige Teil der Kennung (in diesem Beispiel NOR-2c) enthält zusätzliche Angaben zu den verwendeten Visualisierungstechniken, auf die an dieser Stelle jedoch nicht näher eingegangen werden soll. Die Dimension selbst wird in dieser Kennung nicht ausgewiesen. Ihr Einfluss zeigt sich vor allem in der flächenmäßigen Ausdehnung der Gebilde. Besonders anschaulich wird dies, wenn man sie durch Antippen der Bildschirmfläche in Bewegung versetzt.

Die charakteristischen räumlichen Merkmale der Projektion wurden mit zunehmender Ausdehnung tendenziell weniger deutlich. Die visuelle Signatur von THLP war daher bei kleineren Ausdehnungen häufig am klarsten, obwohl auch größere Ausdehnungen überraschende Ergebnisse hervorbringen konnten. Dies sind praktische Beobachtungen aus den visuellen Experimenten und keine strengen mathematischen Regeln.

## SCHLUSSBEMERKUNG

> **THLP erzeugt ein Ordnungsprinzip – indem es endliche Zahlenräume an einem gemeinsamen Ursprung ausbalanciert.**

Ich habe versucht, die Konstruktion dieser Visualisierungen so ausführlich zu beschreiben, dass sie verständlich und reproduzierbar ist, und zugleich die Erklärung fokussiert zu halten, ohne sie auf das absolute Minimum zu reduzieren.

Das zugrunde liegende Prinzip ist nicht zwangsläufig auf die Abbildung in ein zweidimensionales Quadrat beschränkt. Teilt man die Quellkoordinaten in eine andere Anzahl von Blöcken, kann dieselbe Kodierungsidee für Abbildungen zwischen anderen Dimensionen verwendet werden. Die Methode funktioniert dabei in beide Richtungen.
Allgemeiner betrachtet könnte die Methode als Bindeglied zwischen unterschiedlichen Dimensionen dienen.

Mit geeigneten Ergänzungen könnte die Methode auch auf Gitter mit einer ungeraden Anzahl von Dimensionen erweitert werden. Dafür müsste ein geeigneter Umgang mit ungleich langen Koordinatenblöcken oder rechteckigen Zielstrukturen gefunden werden.

Losgelöst von aller Theorie sollte man sich beim Betrachten der Visualisierungen vielleicht bewusst machen, dass sich hier tatsächlich ansonsten verborgene Geheimnisse von Raum und Ausdehnung offenbaren.

## Wie THLP entstand

Ich bin ein Computer-Hobbyist und lebe in der Schweiz, in der Nähe von Basel. Die Erzeugung von Mustern faszinierte mich, und aus dieser Faszination heraus entwickelte ich Number Garden. Die dort erzeugten Bilder überraschten und beeindruckten mich. Zugleich warfen sie Fragen auf, deren Untersuchung schließlich zu THLP führte. Drücke den Button ganz unten. Er öffnet www.Number-Garden.com mit dem Zusatz /?@THLP@, der den THLP-Modus freischaltet.

Bei der Programmierung und der Ausarbeitung dieses Artikels kam KI als Hilfsmittel zum Einsatz. Die zugrunde liegenden strukturellen Eigenschaften der Muster sowie die Entdeckung und Entwicklung von THLP beruhen jedoch auf meiner eigenen menschlichen Arbeit und Konzeption. Diese Vorarbeit war entscheidend: Es ging nicht darum, beliebige Bilder zu visualisieren, sondern Muster durch ein streng definiertes und menschlich überprüftes computergestütztes Verfahren zu erzeugen. Es war eine Menge eigene Arbeit.
