Tiled Lines
Wir starten mit einem der ersten und zugleich einfachsten programmierten Kunstwerke. Auf dem Commodore 64, einem Heimcomputer aus dem Jahr 1982, passt es in eine einzige Zeile:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Das Programm schreibt immer wieder zufällig eines von zwei Zeichen auf den
Bildschirm: einen Schrägstrich nach rechts ╲ oder einen nach links ╱.
Heraus kommt ein Labyrinth, das niemand geplant hat. Über diese eine Zeile
gibt es sogar ein ganzes Buch – es heißt, natürlich, 10 PRINT.
Vorwissen: verschachtelte Schleifen und eigene Methoden.
Eine Linie
Der Stift kennt nur setPosition, down und up. Für eine einzelne Linie
von A nach B braucht man davon gleich vier Anweisungen. Weil wir in diesem
Projekt Tausende Linien ziehen, packen wir die vier in eine Methode linie –
die wirst du auf jeder Seite wiedersehen.
a) Ergänze eine zweite Linie, sodass ein großes X entsteht.
b) Zeichne mit vier Aufrufen von linie einen Rahmen um die ganze
Leinwand, 10 Bildpunkte vom Rand entfernt.
Tipp zu b)
Die Leinwand reicht von −200 bis 200. 10 Bildpunkte weiter innen liegen also die Werte −190 und 190. Die linke untere Ecke ist (−190, −190).
Der Zufall entscheidet
Jetzt bekommt jede Zelle ihren Schrägstrich. Die Methode zeichne bekommt die
linke untere Ecke einer Zelle und ihre Größe. Dann wirft sie eine Münze:
Math.random() liefert eine Zufallszahl zwischen 0 und 1. Ist sie mindestens
0,5, geht der Strich von links unten nach rechts oben, sonst von rechts unten
nach links oben.
flowchart LR
A["Math.random() >= 0.5 ?"] -- ja --> B["╱<br>(x, y) nach (x + breite, y + hoehe)"]
A -- nein --> C["╲<br>(x + breite, y) nach (x, y + hoehe)"]
Damit die ganze Leinwand voll wird, laufen zwei geschachtelte Schleifen über alle Zellen: die äußere von links nach rechts, die innere von unten nach oben.
a) Starte das Programm mehrmals. Das Bild ist jedes Mal anders – woran erkennst du trotzdem, dass es immer dasselbe Kunstwerk ist?
b) Ändere die Konstante SCHRITT auf 10, 40 und 100. Ab wann ist das
Labyrinth kein Labyrinth mehr?
c) Wie viele Linien zeichnet das Programm bei SCHRITT = 20? Rechne es
zuerst aus, bevor du nachzählst.
d) Ersetze 0.5 durch 0.9. Beschreibe, was passiert, und erkläre warum.
Tipp zu c)
Die äußere Schleife läuft von −200 bis 180 in Schritten von 20. Wie oft ist das? Die innere läuft genauso oft – und zwar bei jedem Durchlauf der äußeren.
Weiterspielen
Verlauf. Lass die Wahrscheinlichkeit von links nach rechts wandern: Ganz
links sind fast alle Striche ╱, ganz rechts fast alle ╲. In der Mitte
herrscht das Labyrinth.
Statt der festen 0.5 brauchst du eine Zahl, die von pX abhängt. Für
pX = −200 soll sie nahe 0 sein, für pX = 180 nahe 1.
Drei Möglichkeiten. Erlaube neben den beiden Schrägstrichen eine dritte Möglichkeit: einen waagerechten Strich durch die Mitte der Zelle. Wie musst du die Zufallszahl aufteilen, damit alle drei gleich oft vorkommen?
Farbe. Gib den beiden Richtungen verschiedene Farben. Oder: Lass die Farbe mit der Höhe in der Leinwand langsam von Blau nach Rot wechseln.
stift.setColor(r, g, b) darfst du vor jeder Linie neu aufrufen.
Truchet-Kacheln. Ersetze den Strich durch zwei Viertelkreise, die in gegenüberliegenden Ecken der Zelle sitzen. Solche Muster heißen Truchet-Kacheln – nach dem französischen Mönch Sébastien Truchet, der 1704 als Erster untersucht hat, was man mit zufällig gedrehten Kacheln legen kann.
Einen Viertelkreis zeichnest du wie einen ganzen Kreis aus vielen kurzen Linien – nur mit einem Viertel der Winkel. Wie man einen Kreis aus Linien baut, steht auf der Seite Circle Packing.
Nach dem Tutorial Tiled Lines von Generative Artistry.