Creative Coding

btk

Till Nagel

Objekte 1 - Woche 5

Aufgaben

E1: Farbschema

Erstelle und verwende ein Farbschema. Nutze die Farben, um unter Einsatz von Rotation und Translation eine generative Grafik zu erstellen.

E2: Ball

Definiere eine Klasse mit dem Namen "Ball" und Eigenschaften für Position, Durchmesser und Farbe und einer Methode, die den Ball zeichnet. Erzeuge ein Objekt mit dem Namen "redBall" und weise diesem einen zufällig gewählten Durchmesser und rot als Farbe zu. Die Position soll jeweils an der aktuellen Mausposition sein.

Variation

Variation: Erzeuge zwei weitere Bälle, die feste, zufällige Positionen haben.

Variation: Denk dir weitere Eigenschaften aus (z.B. Strichstärke).

E3: Der bewegte Ball

Erweitere die Klasse Ball um Geschwindigkeitsvariablen. Definiere desweiteren eine Methode move, die die Position um die Geschwindigkeit verändert.

Es soll also solch eine Verwendung in draw() möglich werden:

Variation: Erweitere die Methode move() so, dass der Ball an den Ecken abprallt.

Diskussion: Wie kann man nun mehrere Bälle auf einmal animieren?

Projekt 1: Generative Grafiken

Erstelle ein Sketch, das generativ Grafiken erzeugt. Diese Grafik soll nach gewissen Regeln erstellt werden, die durch Zufall und/oder durch Interaktion beeinflusst werden.

Dokumentation

Schreibt als Kommentar am Anfang in euren Code:

  • Vollständige Namen aller Gruppenmitglieder
  • Macht drei Screenshots, und gebt sie mit ab.
  • Projektbeschreibung: Was ist die Idee/der Hintergrund? Was macht das Programm?
  • Eventuelle Schwierigkeiten, bzw. Unvollständigkeiten in der Umsetzung

Die von euch erstellten Screenshots und Beschreibung werde ich im Internet mit euren Namen veröffentlichen. Gebt euch also Mühe.

Style

Achtet darauf, dass ihr den Code formattiert, sinnvolle, aussagekräftige Variablennamen verwendet und – vor allem – gut kommentiert. (Siehe auch den Style Guide)

Abgabe

Die Projekte müssen im Intranet der BTK eingereicht werden. Archiviert euren Sketch (Processing Menü > Tools > Archive Sketch) und ladet diese Zip-Datei bei der entsprechenden Aufgabe hoch. Kopiert die Screenshots vorher in den Sketch-Ordner!

Letzter Abgabetermin ist Donnerstag, 24.05.07 um 23:59 Uhr.


Farbschema

Farbsymbolik und Farbwirkung

Farben haben immer auch eine Wirkung auf uns Menschen. Diese Wirkung wurde von Künstlern, Psychologen und Wissenschaftlern untersucht und beschrieben, so dass viele – und sich teilweise widersprechende – Farbtheorien existieren.

Verallgemeinernd kann man sagen, dass die Wahrnehmung von Farben auf zweierlei Art psychologisch wirkt:

  • assoziativ: Farben können Erinnerungen an Bekanntes hervorrufen. Wie etwa Feuer (rot), Himmel (blau), oder Baum (braun und grün)
  • symbolisch: Farben können Gefühle hervorrufen. Diese symbolische Beziehungen sind von Kultur und Gesellschaft beeinflusst, und von Mensch zu Mensch verschieden. Es gibt jedoch viele im westlichen Kulturkreis ziemlich allgemein gültige. Bei einigen davon sind diese Bindungen so stark, dass sie als Redewendungen in die Sprache eingegangen sind: Schwarz ärgern, Gelb vor Neid werden, giftgrün.

Viele Farbwirkungen und -symboliken sind nicht klar einem der beiden Bereiche zuordenbar. So ist die Korrelation Wut-Rot vielleicht vom roten Kopf beeinflusst.

Diese sehr vereinfachte Darstellung soll zumindest daran erinnern, dass Farben auch Wirkungen besitzen, und dass diese mehr oder weniger gezielt eingesetzt werden können. (Wie immer gilt, dass diese Regel auch bewußt gebrochen werden kann, bzw. dass man vor allem seinen eigenem Gefühl vertrauen sollte.)

Farben einsetzen

Wenn nun in Processing-Sketches Farben angewendet werden, ist es eine Überlegung wert, ob und wie man diese Farben mit Hinblick auf die Wirkung einsetzt. Insbesondere wenn die Farben in generativen Grafiken vom Zufall beeinflusst werden, sollte beachtet werden, dass nicht einfach beliebige Farben verwendet werden und es nicht in einer Kakophonie der Farben ausartet.

Dazu gibt es verschiedenste Möglichkeiten, wovon nun zwei einfache vorgestellt werden.

Farbpaletten

Man definiert einige Farben, und wählt zufällig aus dieser Palette eine aus. Diese Methode entspricht im Muster wieder dem Grundsatz der generativen Grafik. Wie wir letzte Stunde gesehen haben, kann die Mischung aus vordefinierten, festen Regeln einerseits und Zufall andererseits oft zu spannenden Ergebnissen führen.

In diesem Beispiel werden also in einem Array ausgewählte Farben gespeichert, von denen per Zufall jeweils eine ausgewählt wird, um einen farbigen Kreis zu zeichnen. (Die Funktion int() in Zeile 12 wandelt ein float- in einen int-Wert um.)

Als Inspirationsquelle zum Erstellen von Farbschemen kann z.B. auch eins der folgenden Tools genutzt werden:

Sanfte Abweichung

Wie im letzten Semester bereits besprochen, kann man den "sanften Zufall" verwenden, um nur leichte zufällige Abweichungen zu erhalten. Wenn man etwa bei einem Grünton anfängt, und die Nachbarelemente etwas heller oder etwas dunkler werden können, aber keine komplett andere Farbe annehmen oder starke Sprünge vollziehen.

Zufallsbereich

Auch dies ist eine Wiederholung aus dem letzten Semester: Um nur in einem gewissen Rahmen Farben auszuwählen, kann die Zufallsfunktion mit Ober- und Untergrenze genutzt werden:

Im obigen Beispiel werden also rote Töne mit einem Transparenz-Wert zwischen 50% und 100% genutzt.

Objektorientierte Programmierung

Objektorientiertes Programmieren (OOP) ist ein Programmierkonzept, dass von den meisten höheren Programmiersprachen wie Processing oder ActionScript unterstützt wird. Objektorientierte Programme sind nicht unbedingt schneller oder schlanker, sie sind aber oft besser zu verstehen. In diesem Sinne bedeutet OOP vor allem, anders über Programmierung nachzudenken. Im Mittelpunkt des OOP steht das Objekt. Statt mit einzelnen Funktionen und Variablen zu arbeiten, bietet OOP die Möglichkeit, eine Reihe von Eigenschaften und Methoden abzukapseln und sie als eine Einheit, bzw. als ein Objekt zu behandeln. Diese Objekte können dann ein hohes Maß an Komplexität bekommen. Jedem Objekt liegt eine Klasse zugrunde, in der schon die grundsätzliche Struktur aller Objekte angelegt ist.

Eigenschaften und Methoden

Jedes Objekt hat Eigenschaften und Methoden. Die Eigenschaften bestimmen wie ein Objekt ist, die Methoden, was das Objekt tun kann. Das Konzept der Objekte wurde aus der realen Welt entlehnt, daher ist es oft eingängiger und nachvollziehbarer als etwa mit vielen Arrays zu arbeiten.

So hat vielleicht der Strandball einen Durchmesser von 20cm, ist rot-weiß gestreift und aus Plastik (Eigenschaften). Und man kann den Ball nun werfen, treten oder auch die Luft herauslassen (Methoden).

Klassen und Objekte

Eine Klasse ist eine abstrakte, ordnende Struktur, der man eine Reihe von Eigenschaften und Methoden zuweisen kann. Ein Objekt nun ist eine konkrete Variante dieser Klasse, eine sogennante Instanz.
Um zum Beispiel zurück zu kommen: Es gibt natürlich unzählige verschiedene Bälle auf der Welt, aber alle haben ein paar Dinge gemein: Sie haben eine Größe, eine Farbe und ein Material.

Strukturiert sieht die Klasse dann so aus. Ein Ball hat allgemein folgende Eigenschaften:

  • Größe
  • Farbe
  • Material

Und jeder einzelne Ball, jedes Objekt, hat eine ganz spezielle Größe und eine ganz spezielle Farbe.

Unser Strandball etwa hat folgende Eigenschaften:

  • Größe: 20cm
  • Farbe: rot-weiß gestreift
  • Material: Plastik

OOP in Processing

Bei der objektorientierten Programmierung in Processing müssen ein Menge Dinge beachtet werden. Zum Verständnis zeige ich im Folgenden ein Programm, das ein Kreis zeichnet: Einmal im "klassischen" Verfahren und dem gegenüber gestellt das Programm in OOP.

Das nächste Programm zeigt, wie dies nun mit einem Objekt umgesetzt werden kann:

Im Beispiel haben wir eine Klasse Ball definiert. Dies geschieht, indem man class und den Namen der Klasse und dann einen Programmblock (umfasst von geschweiften Klammern) hinschreibt. In diesen Block werden die Eigenschaften und Methoden der Klasse definiert.

Innerhalb der Klasse haben wir eine eigene Funktion definiert (drawShape). Interne Funktionen von Klassen werden in der OOP Methoden genannt.

Wir haben also die allgemeine Struktur definiert und möchten jetzt einen konkreten Ball erstellen. Um ein Objekt dieser Klasse zu erzeugen, verwendet man new:

Es gibt danach ein neues Objekt mit dem Namen myBall. Über diese Variable kann danach die Methode aufgerufen werden:

Dies führt dazu, dass die Methode aufgerufen wird und das Rechteck gezeichnet wird. Diese Verwendung von Methoden nennt man aufgrund des Punktes zwischen Objekt-Variablennamen und Methodennamen die Punktnotation.

Ablauf der OOP

Um Objekte einsetzen zu können, muss man

  1. Eine eigene Klasse definieren
  2. Objekte mit Hilfe der Klasse erzeugen (sogenannte Instanzen)
  3. Diese Objekte verwenden

Eigenschaften

Wie oben gesehen, kann eine Klasse nicht nur Methoden, sondern auch Eigenschaften haben. Diese werden direkt in die Klasse geschrieben.

Von aussen können die Eigenschaften nun genutzt, d.h. aktuelle Werte ausgelesen oder neue Werte gespeichert werden.

Und natürlich können die Eigenschaften auch und vor allem in der Klasse selbst verwendet werden. Innerhalb der eigenen Methoden muss nicht die Punktnotation genutzt werden:

Creative Commons Lizenz: Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 2.0 (Deutschland)

© 2007 Till Nagel, All rights reserved – Alle Rechte vorbehalten.