Informatik

Piet Mondrian

Piet Mondrian (1872–1944) war ein niederländischer Maler. Seine bekanntesten Bilder kommen mit erstaunlich wenig aus: schwarze, waagerechte und senkrechte Balken, weiße Flächen dazwischen und ein paar Felder in Rot, Blau und Gelb. Mondrian hat nie einen Computer benutzt – aber seine Bilder sehen so aus, als folgten sie einer Regel. Wir suchen eine.

Unsere Regel: Beginne mit einem einzigen Rechteck, der ganzen Leinwand. Geh dann an festen Stellen entlang und schneide jedes Rechteck, das dort liegt, mit einer Wahrscheinlichkeit von 50 % in zwei Teile. Zum Schluss färbe drei zufällige Rechtecke ein.

Vorwissen: Klassen und Objekte, eindimensionale Felder und die Methode linie aus Tiled Lines.

Rechtecke teilen

Ein Rechteck merkt sich seine linke untere Ecke (x, y), seine Breite und seine Höhe. Es kann außerdem zwei Dinge selbst beantworten:

  • Liegt eine senkrechte Schnittlinie bei pX innerhalb von mir? (enthaeltX, entsprechend enthaeltY)
  • Wie sehen meine beiden Teile aus, wenn man mich dort schneidet? (linkerTeil und rechterTeil, entsprechend untererTeil und obererTeil)

Alle Rechtecke stehen in einem Feld. Wird eines geteilt, ersetzt der erste Teil das alte Rechteck an seinem Platz, und der zweite Teil wird hinten angehängt. Die Schleife läuft dabei nur über die Rechtecke, die es vor dem Teilen schon gab – die Anzahl merkt sie sich am Anfang in bisher.

a) Gib am Ende des Konstruktors mit IO.println(anzahl) aus, wie viele Rechtecke entstanden sind. Starte mehrmals. Was ist die kleinste, was die größte mögliche Anzahl?

b) Ersetze Math.random() > 0.5 durch Math.random() > 0.2 und durch Math.random() > 0.8.

c) Ersetze in teileSenkrecht die Zeile for (int i = 0; i < bisher; i++) durch for (int i = 0; i < anzahl; i++). Jetzt prüft die Schleife auch die frisch angehängten Teile. Ändert sich dadurch etwas am Bild? Begründe mit der Methode enthaeltX.

d) Das Feld hat 100 Plätze. Reicht das immer? Begründe mit deiner Antwort aus a).

Tipp zu a)

Die Schnittlinien liegen bei −200 + k · 400/6. Bei −200 selbst wird nie geschnitten – warum nicht? Es bleiben fünf senkrechte und fünf waagerechte Linien. Wie viele Felder entstehen, wenn jedes Mal geschnitten wird?

Farbe ins Bild

Jetzt bekommt jedes Rechteck eine Farbe. Am Anfang ist sie das warme Weiß von Mondrians Leinwänden. Drei zufällige Rechtecke werden danach rot, blau und gelb.

Gefüllt wird wieder mit vielen Linien: Für jede Höhe von unten nach oben zieht der Stift eine waagerechte Linie durch das ganze Rechteck. Erst wenn alle Rechtecke gefüllt sind, kommen die schwarzen Ränder darüber.

a) Manchmal sind im fertigen Bild nur zwei farbige Felder zu sehen statt drei. Woran liegt das? Ändere das Programm so, dass es immer drei sind.

b) Vertausche die beiden letzten Schleifen im Konstruktor, sodass zuerst umrandet und danach gefüllt wird. Was passiert?

c) Die geteilten Rechtecke übernehmen ihre Farbe nicht. Warum ist das hier egal?

Tipp zu a)

Math.random() kann zweimal hintereinander dieselbe Zahl zufall liefern. Du kannst so lange neu würfeln, bis du ein Rechteck triffst, das noch weiß ist. Wie erkennst du das? Vergleiche Farben mit equals, nicht mit ==.

Weiterspielen

Echte Mondrians sind nicht gleichmäßig. In seinen Bildern liegen die Linien nicht in festen Abständen. Wähle die Schnittstellen zufällig, statt SCHRITT zu benutzen.

Große Flächen färben. Mondrian hat selten winzige Felder eingefärbt. Färbe nur Rechtecke, deren Fläche größer als ein bestimmter Wert ist – oder färbe gezielt das größte.

Eigene Palette. Ersetze Rot, Blau und Gelb durch andere Farben, etwa die Farben deiner Schule oder deines Lieblingsvereins. Ist es dann noch ein Mondrian?

Rekursiv teilen. Ganz anders, aber genauso schön: Teile die Leinwand an einer zufälligen Stelle und teile jede Hälfte wieder mit derselben Methode – bis die Teile zu klein werden. Das ist Rekursion wie auf der Seite Hypnotic Squares.


Nach dem Tutorial Piet Mondrian von Generative Artistry.

Piet Mondrian

Teilbare URL erstellen

Abschnitte auswählen