Generative Grafiken 1 - Woche 2
Aufgaben
B1: Rotationsprinzip
-->Erstelle zwei statische Sketches, bei dem ein Rechteck so gedreht wird, dass die weißen Quadrate wie in den Bildern zu sehen sind.
Tipp: Nimm die opaquen Rechtecke in den Bildern als Hinweise.
B2: „Schleifen drehen“
Verwende Schleifen und rotate()
, um damit generative Grafiken zu erstellen.
Variante: Mach es interaktiv! Lass es also bspw. von der Mausposition abhängig machen.
Variante: Nutze Farben und Transparenzen.
B3: Auf zum 1. Mai!
Entwirf ein interaktives Plakat zum 1. Mai, in dem du verschiedene Grafikstyles verwendet, die der Nutzer miteinander kombinieren kann. Dies können unter anderem sein:
- Mit Schleifen erzeugte Grafiken
- Zufällig positionierte visuelle Elemente
- Bilder laden und als Stempel (Brush) verwenden
- Fonts verwenden und Text anzeigen
- und alles, was euch noch so einfällt …
Verwende für diese Aufgabe den folgenden Code als Basis, und füge weitere Grafikenelemente hinzu,
indem du neue Funktionen schreibst (so wie drawCircles()
als Beispiel) und diese für höhere
currentStyle-Werte aufrufst — z.B. if (currentStyle == 5) { drawFlag(); }
Drehen & Wenden
In Processing ist es möglich, grafische Elemente wie Ellipsen und Rechtecke, aber auch Bilder und Texte zu transformieren.
Rotation
Zur Veranschaulichung der Rotation in Processing werden ein bzw. mehrere Rechtecke gedreht:
Fig. 1
Fig. 2
Und hier der Code für Fig. 2:
rotate()
rotate(angle);
Dreht die Zeichenfläche um den angegebenen Winkel im Bogenmaß. Wie in Fig. 2 gut erkennbar gilt dabei:
- Es wird um den aktuellen Nullpunkt gedreht.
- Mehrere
rotate()
-Anweisungen addieren sich.
Positive Winkelwerte drehen dabei die Elemente im Uhrzeigersinn, während negative Werte diese gegen den Uhrzeigersinn rotieren lassen.
rotate(+45°)
rotate(-45°)
Bogenmaß und Grad
Den Winkel in der rotate()
-Funktion muss im Bogenmaß angegeben werden.
Die folgenden drei Code-Snippets erzeugen also die gleiche Drehung:
Im dritten Fall wurde der Winkel statt in Bogenmaß in dem etwas intuitiveren, bzw. verinnerlichterem Grad angegeben.
Dazu können wir die Umrechnungsfunktion radians()
verwenden.
Einheitskreis mit Grad-Winkeln
Transformation
Wenn man nun die Elemente nicht nur um den Nullpunkt (oben links) drehen möchte, sondern etwa um die eigenen
Nullpunkt, dann kann man mit Hilfe von translate()
andere Transformationen kombinieren.
translate()
translate(x, y);
Verschiebt den Zeichenbereich um die angegebene Position.
Ohne Verschiebung
Fig. 7: Mit Verschiebung
rotate() & translate()
Die Abbildung in Fig. 7 wird natürlich auch erreicht, wenn einfach das Rechteck direkt an
die Position gezeichnet wird (also durch rect(50, 50, 100, 100);
). Das Problem ist hierbei
dass dies nicht wie erwartet funktioniert, wenn man das Element zusätzlich rotieren möchte (siehe Fig. 9)
rect(50, 50, 100, 100);
Fig. 9: "Falsche" Drehung um den Nullpunkt des Zeichenbereichs
Um das korrekte Ergebnis (Rotation um den visuellen Nullpunkt des Rechtecks) zu erhalten, müssen also
translate()
und rotate()
wie im Folgenden miteinander kombiniert werden:
Animation mit Drehungen
Nun können diese Rotationen natürlich auch über die Zeit verändert werden, also bspw. kann der Winkel wie jegliche andere Variablen auch variieren.
„Schleifen drehen“
Sehr interessante und hübsche Resultate können erzielt werden, wenn grafische Transformationen in Schleifen wiederholt zum Einsatz kommen.
Wie mit Hilfe einer einfachen Drehung und einer einfachen Schleife eine Spirale entsteht, zeigt das folgende Schritt-für-Schritt Beispiel.
Beispiele
SquareFlower
Nachfolgend ein kleines Beispiel, das mit Schleifen und Rotation arbeitet, und darüber hinaus interaktiv ist.
Hier geht's zum SquareFlower Beispiel.