Projektdokumentation

Transcrição

Projektdokumentation
Nature of Code
Nature
code
Diana Lange
HAWK Hochschule für Angewandte Wissenschaft und Kunst 2012
S
E
I
Inhalt
T
E
26
26
30
Einführung
Projekte
Ausgangssituation
Sonstiges
Relevanz
Text
Themenfindung
Weave
34
Pflanzen
41
L-System Wachstum
Stengel
52
Fotos
Schlaf
Weltall
Gestaltung
Ast/Blume
Fraktale
Baum
Glossar
Quellen, Links & Bildnachweis
52½
Kugel
Terrain
58
6
6
62
Impressum
66
11
70
14
74
24
76
20
48
16
14½
44
5
Einführung
Ausgangssituation
Bereits der Titel »Nature of Code« verrät viel über den Inhalt des Projektes: »Nature« bedarf eigentlich keine Erklärung; es geht offensichtlich um Pflanzen, Tiere oder Ähnliches. »Code« weißt darauf hin, dass
das Ganze etwas mit Programmierung zu tun hat. Darüber hinaus
gibt es bereits ein gleichnamiges Projekt von Daniel Shiffman, welches eine Sammlung von Programmier-Tutorials ist. Enthalten sind die
Schwerpunte Algorithmen, Trigonometrie, Fraktale und Rekursion,
Physik und anderen naturnahen Themen wie dem Schwarmverhalten. Die Tutorials von Daniel Shiffman können als Ausgangspunkt zu
meinem Projekt angesehen werden, da bereits so gut wie alle von mir
behandelten Themen in der ein oder anderen, vereinfachten Form
dabei dort angerissen worden sind. Demnach war meine persönliche
Zielvorstellung für dieses Projekt, naturnahe oder naturinspirierte Objekte und/oder Grafiken zu erzeugen.
INSPIRATION
http://www.shiffman.net/teaching/nature/
http://www.fadstudio.us/
http://n-e-r-v-o-u-s.com/
http://www.jonathanmccabe.com/
http://theverymany.com/
http://www.biothing.org/
http://marcinignac.com/
http://justinlivi.net/
http://tomasz-starczewski.com/
http://nonstandardstudio.wordpress.com/
http://pixelero.wordpress.com/
http://anf.nu/
Ein zu Beginn des Projektes erstelltes Mindmap zur Erschließung von Themengebieten.
7
Ausgangssituation
#1
#2
#3
#7
#12
#4
#5
#8
#9
»Vorbilder« oder auch Inspirationsquellen sind die Arbeiten von verschiedenen Künstlern und Designern, welche jeweils den Weg über die
#6
Programmierung gehen, um die natürliche Erscheinungen nachzuempfinden.
#1 Marc Fornes & THEVARYMANY: Y/Surf/Struc. 2011
#2 Francis A. Bitonti: Combustion Pavilion
#11
#3 Nervous System: seed #1. 2010
#4 Francis A. Bitonti: Bristle Chair
#5 Jonathan McCabe: local bilateral symmetry bone music. 2011
#10
#6 Tomasz Starczewski: Diatom. 2009
#7 Nevous System: Reaction Cup. 2011
#8 Andreas Nicolas Fischer: Untitled (G IV). 2011
#9 Marc Ignac: Space Colonization. 2011
#10 Justin Livi: justinlivi.Geode();. 2011
#11 Justin Livi: justinlivi.Dandelion();. 2011
#12 Alisa Andrasek: Orbita Series. 2006
9
Einführung
Die Natur ist eine reiche Quelle für Designer. Sie steckt voller Formen und Farben, die seit Beginn der Zivilisation zu visuellen Erfindungen angeregt haben.
Der größte Teil der Materialien, aus denen Dinge hergestellt werden, stammt
aus der Natur, sie ist die Grundlage aller Ornament- und Schmucksysteme. Die
Natur als Lehrmeisterin zeigt aber nicht nur funktionale Lösungen, sondern sie
verändert darüber hinaus das Bewusstsein und die Wahrnehmung von Schönheit und Bedeutung.
Relevanz
Alan Powers, Natur und Design
Das Projekt »Nature of Code« verfolgt keinen bestimmten Zweck, kein
bestimmtes Anwendungsgebiet. Es ist
vielmehr eine Art Forschungsprojekt,
um sowohl die Grenzen der Programmierbarkeit von Natur als auch die
eigenen Wissensgrenzen zu definieren. Aber häufig sind genau solche
Experimente die Basis für darauf folgende angewandte Arbeiten. Sowohl
die Formensprache, der Aufbau, die
Farbgebung als auch die Arbeitsweise
fliesst in so gut wie alle Design-, Architekur- und Kunstobjekte mit ein. Einige solcher Arbeiten werden auf der
nächsten Doppelseite gezeigt.
Das »Modell Natur« mit seinen Formen, Strukturen und konstruktiven Gesetzmässigkeiten fliesst nicht nur in die unterschiedlichsten Konzepte und Gestaltungsprozesse ein, sondern kommt
auch in einer großen Bandbreite von Formgebungen und Funktionen zum Ausdruck.
Nature Design S. 9
Die Natur kann für jedes Designobjekt einen »Look« und
Stil liefern, aber ihr Potential geht weit darüber hinaus.
Grundsätzlich bietet sie ein tiefgründiges und befriedigendes Verständnis unserer selbst und unseres Platzes in
der Welt und die Fähigkeit, - durch die Designpraxis - bestimmte Fragen zu beantworten, die von Forschern, Dichtern oder ökologischen Kampagnen nicht beantwortet
werden können.
Alan Powers, Natur und Design S. 10
11
Relevanz
#6
#3
#10 Ronan & Erwan Bouroullec: Algue, 2004,
#1 Georg Dobler: Brosche, 1997, Naturabguss Phy-
Modulares Stecksystem aus spritzgegossenem
#7
salis, Silber oxidiert, Amethyst, 100 x40x30 mm
Kunststoff, Modul 320 x 257 x 40 mm
#2 Jason Munn & The Small Stakes: Konzert Plakat
#11 John Ruskin: The Stones of Venice, 1851 - 53
für Mark Kozelek, 2006
#3 Deane & Woodward: Hof des Oxford-Museum,
1855 - 61
#10
#4
#1
#11
#8
#2
#4 Marin Kvamme: CD Booklet »Magnet: The Tourniquet«,
2005
#5 R. Buckminster Fuller: Expo Dome, Weltausstellung 1967
#6 Georg Dobler: Brosche, 1990, Naturabguss Äste, Silber,
93x38 x 20 mm
#9
#7 Rebecca Earley: Wärmetransferdruck auf Baumwolle
#8 Poul Henningsen: PH Zapfen »Artischocke«, 1958,
72 Schuppen aus nasslackiertem Edelstahl, 750 mm
#9 Alice Stevenson: Sensory Perception, 2005, Zeichnung
#5
13
Einführung
Themenfindung
Am Anfang des Projektes fand neben
einer theoretischen Recherchearbeit
zum Thema auch eine photographische Untersuchung statt. Das bedeutet, dass ich eine Zeit lang Pflanzen,
Tiere und andere Dinge photographiert habe (siehe beiliegendes Heft).
Das Ziel dabei war aus diesen Photos
anschließend mögliche Projektthemen
zu finden.
Gegenüberstellung von Vorbild/Original und generative Umsetzung.
15
Einführung
Gestaltung
Im Verlauf der Projektarbeit hat sich
gezeigt, dass die Ergebnisse sich optisch stark unterscheiden. Zum einen
sind einige Arbeiten zweidimensional
sind und andere dreidimensional. Zum
anderen gibt es sowohl Grafiken mit
feinen Linienstrukturen als auch eher
flächige, teilweise mit leichten verläufen versehene Zeichnungen. Daher
war es für mich wichtig, dem gesamten Projekt ein einheitliches Erscheinungsbild zu geben.
BIODIVERSITY HERITAGE LIBRARY
www.flickr.com/photos/biodivlibrary/
Vorlage für die Gestaltung sind zum einen historische, untersuchende Zeichnungen, welche zur Auflistung und
Unterscheidung von Arten angefertigt
wurden. Zum anderen orientiert sich
die Darstellung an einem Herbarium.
17
#2
Gestaltung
#1
#5
#6
#7
#4
#1 George Robert Gray: Description
and Figures of some new Lepidopterous Insects, chiefly from Nepal.
1846
#2 Albrecht Dürer: Akelei. 1526
#3 E. Donovan: The Natural History
of British Insects. 1792
#4 Naomi Okamoto: Sommergras ist
alles, was geblieben ist vom Traum
des Kriegers.
#5 Peony Yip: Organic VIII. 2012
#6 Johannes Gessner: Achillae macrophylla. Bound herbarium. 1783
#7 A. Smith: Untitled. 2010
#8 Diana Lange: Zeichnung. 2012
#9 und #10 Diana Lange: Nature of
Code. 2012
#11 und #12 Nature of Code in Progress. 2012
#10
#3
#12
#9
#8
19
#11
Einführung
Fraktale
Ein wiederkehrendes Thema in den
Einzelarbeiten von »Nature of Code«
sind fraktale Strukturen und Selbstähnlichkeit. Daher erfolgt in diesem
Kapitel eine kurze Klärung der Begrifflichkeiten und Zusammenhänge.
Eines der bekanntesten Fraktale ist die Mandelbrot-Menge, welche
bereits im Jahr 1978 erstmals von Robert Brooks und Peter Matelski als Computergrafik dargestellt wurde.1 Namensgeber für dieses
Fraktal war der Namensgeber Benoît B. Mandelbrot. Neben seinen
Verdiensten in der fraktalen Geometrie war Mandelbrot maßgeblich
an Lösungen mathematischer Probleme beteiligt und arbeitete in den
Bereichen der theoretischen Physik, der Finanzmathematik und der
Chaosforschung. In Bezug auf der fraktalen Geometrie leistete er den
wichtigen Ansatz, die fraktale Geometrie für die Beschreibung realer
Objekte anzuwenden. Mandelbrot entdeckte, dass es eine Vielzahl
an natürlichen Fraktalen gibt: Ob man nun die Formen von Bergen,
Küstenlinien und Flüssen betrachtet, oder die Verästelung von Pflanzen, Blutgefäßen und Lungenbläschen, oder auch die Verteilung von
der Sternhaufen in Galaxien, alle diese Strukturen lassen sich durch
die wichtigste Eigenschaft eines Fraktals beschreiben, die Skaleninvarianz.2
Skaleninvarianz beschreibt die Eigenschaft eines Zustands, Vorgangs, Verhältnisses oder einer Situation, bei dem bzw. der auch bei Veränderung der Betrachtungsgrößen (Skalierung) die Eigenart oder Charakteristik inklusive seiner Eckwerte weitestgehend exakt gleich bleibt, so dass ein Zustand der Universalität
gegeben ist.3
Da auch die Mandelbrot-Menge zu den Fraktalen gehört, entspricht auch sie
dieser Definition. In den Strukturen am Rand der Menge werden verkleinerte,
ungefähre Kopien der gesamten Mandelbrot-Menge sichtbar. Damit zeigt sich
auch eine gewisse Gemeinsamkeit zur Genetik. Die Randstrukturen der Mandelbrot-Menge, genannt Satelliten, können mit den Genen von Organismen
verglichen werden. Beides enthält jeweils den Bauplan für den gesamten Organismus, bildet aber lokal nur das entsprechende Organ aus.4
Selbstähnlichkeit im engeren Sinne ist die Eigenschaft von Gegenständen, Körpern, Mengen oder geometrischen Objekten, in größeren Maßstäben, d. h. bei
Vergrößerung dieselben oder ähnliche Strukturen aufzuweisen wie im Anfangszustand.5
Fraktale sind demnach sowohl natürliche als auch künstliche Gebilde,
welche als Muster ausgebildet sein können, die einen hohen Grad
von Skaleninvarianz und Selbstähnlichkeit enthalten. Sie können
durch verschiedene Verfahren erzeugt werden: durch die Iteration
von Funktionen, durch Dynamische Systeme oder den L-Systemen.6
1 vgl. R. Brooks, J. P. Matelski: dynamics of 2-generator subgroups of PSL(2,C)
2 vgl. wikipedia.de: Benoît Mandelbrot
3 wikipedia.de: Skaleninvarianz
4 vgl. wikipedia.de: Selbstähnlichkeit
5 wikipedia.de: Skaleninvarianz
6 vgl. wikipedia.de: Fraktal
21
Fraktale
Selbstähnlichkeit und natürliche F´raktale
#1 Diana Lange: Baumstamm
#2 Wurzel der Sonnenblume (Helianthus spec.)
#3 Hermann Schachner: Scapania undulata Blattzellen
#4 Diana Lange: Blattdetail
#5 Diana Lange: Blatt
#6 Diana Lange: Baum
#3
#1
#4
#5
#6
#2
Fraktale
#7 Mandelbrotgrafik
#8 Romanesco Blumenkohl
#9 computergenerierte Fraktalgrafik
#10 NASA: The Antennae Galaxies in Collision, Hubble images
#11 NASA: Omega Nebula, Hubble images
#7
#8
#9
#10
#11
23
Einführung
Glossar
Dynamische Arrays
Dynamische Arrays übernehmen die selbe Aufgabe wie einfache
Arrays. Der einzige Unterschied ist, dass beim Erstellen die Größe
des Arrays nicht festliegen muss. Das bedeutet, dass innerhalb
des Programmes Daten dynamisch hinzugefügt oder wieder ent-
Variablen & Datentypen
Schleifen
Funktionen und Methoden
fernt werden können. Der Nachteil gegenüber den Arrays ist, dass
Variablen werden dazu benutzt um Daten festzuhalten. In Pro-
Als Schleife wird das wiederholte Ausführen von Anweisungen
Funktionen sind dazu da innerhalb des Programmes Teilprobleme
die »Liste« mehr Speicherplatz verbraucht, da jedes Mal, wenn
cessing und den meisten anderen Programmiersprachen gibt
bezeichnet. Auf diese Weise können die Anweisungen definiert,
zu lösen oder Daten zu verarbeiten. Man kann zwischen verschie-
ein Objekt hinzugefügt wird neuer Speicherplatz allokiert wer-
es folgende Datentypen: int (Integer) für Ganzzahlen, float für
modifiziert oder einfach nur ein vielfaches durchgeführt werden
dene Typen von Funktionen unterscheiden. Es gibt zum Beispiel
den muss.15
Gleitkommazahlen, boolean für wahr / falsch, char für ein einzel-
bevor eine Abbruchsbedingung eintrifft. In Processing gibt es drei
Funktion mit und ohne Rückgabewert und mit oder ohne über-
nes Zeichen (z. B. ein Buchstabe) und color für Farben. Bei allen
Möglichkeiten für Schleifen: while, do... while und for. Der Syn-
gebene Paramter.13 Ein einfaches Beispiel zur Berechnung einer
diesen Datentypen spricht man von »Primitives«, also einfachen
tax der for-Schleife lautet:
Summe könnte so aussehen:
Assoziative Arrays
Datentypen. Darüber hinaus gibt es noch »Composites«, zusam-
for (Anfangsbedingung, Abbruchbedingung, Veränderung der
int summe (int a, int b) { return (a+b); }
Die Art von Arrays, in Processing genannt HashMap, ist ebenfalls
mengesetze Datentypen. Dazu gehören Strings für Zeichenket-
Anfangsbedingung)10
»int« (Ganzzahl) ist der Rückgabewert, dass heißt das an der
dynamisch. Die einzelnen Instanzen können aber nicht nur über
ten (z. B. Wörter), Arrays, ArrayLists und Objects. Unabhängig
Stellen des Programmes, an dem die Funktion aufgerufen wird,
einen Indexwert abgefragt werden, sondern beispielsweise auch
vom Datentyp erfolgt die Deklaration und Wertzuweisung immer
die Summe aus den beiden übergebenen Paramtern »a« und »b«
über ein Suchwort.16
7
8
gleich: Typ name = Wert;
berechnet wird. »summe« ist der Funktionsname, durch welchen
Beispiel mit »iNum« als Variablenname: int iNum = 12;
Klassen und Objekte
Jeder Datentyp »verbraucht« eine bestimmte Menge an Speicher.
Klassen sind Sammlungen von Attributen und Methoden.
Um beispielsweise ein Integer zu speichern werden 32 bits benö-
dienen dazu, den Code in komplexen Programmen zu organi-
tigt, bei einem String schon doppelt so viel. Gerade für aufwen-
sieren und zu strukturieren. Oder anders gesagt, jede Klasse ist
dige Programmierungen und Programme, die in Echtzeit laufen
dafür da, ein Problem zu lösen oder eine bestimmte Aufgabe zu
Arrays
10 vgl. ebd., XIX S. 8ff
sollen, muss der Speicherverbrauch bewusst eingesetzt werden
erfüllen. Instanzen von Klassen werden als Objekte bezeichnet.
12
Eine Array ist eine Art Liste, in welcher mehrere Instanzen vom
11 vgl. www.willemer.de/informatik/java/javaclas.htm
und möglichst immer auf den kleinsten Datenspeicher zurück ge-
Ein beliebtes Veranschaungsbeispiel für die Erklärung von Klas-
gleichen Datentyp zwischengespeichert werden kann. Im Gegen-
12 vgl. K. Terzidis: Algorithms for Visual Design, XIX S. 63f
griffen werden.
sen ist der Mensch. Sabine bespielsweise ist eine Instanz der
satz zu den Dynamischen Arrays, muss beim Erstellen bereits die
13 vgl. Wolf: C++ von A bis Z, S.94ff
In den meisten Fällen ist es auch möglich einen Datentyp in einen
Klasse Mensch. Sie ist blond, hat grüne Augen und ist 1.78 m
Größe des Arrays festliegen, d.h. wie viele Einträge in die Liste
14 vgl. K. Terzidis: Algorithms for Visual Design, XIX S. 28f
anderen umzuwandeln. Dabei wird von Typecasting oder einfach
groß. Marco hingegen hat schwarze Haare, braune Augen und
gespeichert werden sollen. Bei Arrays sind die einzelnen Instan-
15 vgl. D. Shiffman: Learning Processing, S.428f
nur Casting gesprochen.9 Ein Beispiel:
ist 1,82 m groß. Beide gehören sie der Klasse Mensch an, denn
zen bzw. Listeneinträge jeweils über einen Indexwert erreichbar,
16 vgl. processing.org
float f = 3.6;
sie haben die gleichen Attribute: Haarfarbe, Augenfarbe, Größe.
d.h. die Reihenfolge der Einträge spielt eine wichtige Rolle.
int i = (int) f;
Werden Klassen verwendet, so wird dies als objektorientierte
»i« nimmt dabei den Wert »3« an (die Dezimalstellen werden
Programmierung, oder kurz OOP, bezeichnet.
einfach weggelassen).
die Funktion wie im folgenden Beispiel aufgerufen werden kann:
11
Sie
int x = summe (2, 4);
7 vgl. K. Terzidis: Algorithms for Visual Design, XIX S. 2f
8 vgl. www.processing.org/reference/
9 vgl. K. Terzidis: Algorithms for Visual Design, XIX S. 3f
14
25
Projekte
BILD http://www.flickr.com/photos/dianalange/sets/72157629206992270/
VIDEO http://vimeo.com/dianalange
CODE http://openprocessing.org/user/5969
Sonstiges
Exkurs: Die Projektseite
Im Verlauf der Arbeit entstanden neben den eigentlichen Projekten eine
Reihe von kleineren Übungen und Nebenprodukten. Einige davon werden
auf der nächsten Doppelseite gezeigt.
#1 Projekttitel
#2 Projektassoziation / Natürliches
bzw. naturalistisches Vorbild
#3 Einführungstext
#4 Definitionen
#5 Quellen
#6 Links zum Projekt
#7 Themenbezogenes Zitat
#8 Weitere Informationen
#9 Programmierung: Klassen und ihre
wichtigsten Aufgaben und Funktionen
#10 Sonstiges
#7
#2
#8
#1
#9
#3
#6
#5
#4
#10
27
#1
Sonstiges
#2
#3 Pusteblumenzeichnung: Strahlen
gehen im dreidimensionalen Raum
von einem Punkt aus; am Ende jedes
Strahls befindet sich ein Schirmchen.
#4 Sortierzeichnung: Eine bestimmte Anzahl an Punkten wird auf einer
Fläche mit zufälliger Position verteilt.
Diese Punkte werden anschließenden
so sortiert, dass sie mit einer sich nicht
kreuzenden Linie verbunden werden
kann.
#3
#1 Zeitbasiertes Zeichnen: Zwei Punkte bewegen sich auf einer Kreisbahn.
Diese zwei Punkte werden mit einer Linie verbunden, welche sich von Weiß
zu Schwarz und wieder zurück verändert. Nach einem zufällig gewählten
Zeitraum ändert sich die Position und
der Durchmesser der Kreisbahn.
#2 Sinuszeichnung: Experiment mit
den Winkelfunktionen im dreidimensionalen Raum.
#4
29
Projekte
Exkurs: Kreispunkte berechnen
Text
»Text« ist ein Übungsprojekt, was
nicht viel mit dem ursprünglichen Thema, »Natur« als Vorbild zu tun hat,
außer dass die elementare Funktionsweise auf Rekursion basiert. Mir ging
es dabei in erster Linie darum, meine
Programmiertechnik zu verbessern,
den Programmcode besser oder sinnvoller zu strukurieren und neue Techniken, wie das Arbeiten mit Assoziativen Arrays zu erlernen.
Divide & Conquer
Divide & Conquer bzw. »Teile und Herrsche« ist ein Such- bzw.
Problemlösungsansatz aus dem Bereich der Informatik.17 Das gestellte Problem wird in kleinere und demnach einfacher zu lösende Teilprobleme untergliedert. Über ein rekursives Verfahren
werden so Teillösungen gefunden, welche wiederum die Lösung
des Gesamtproblemes bilden. Ein häufiger Anwendungsbereich
ist die Suche in sortierten Listen: »Hierzu wird das Element in der
Mitte der Liste mit dem gesuchten Eintrag verglichen. Anschließend muss nur noch in dem vorhergehenden oder nachfolgenden
Teil weiter gesucht werden. Dazu kann dieser erneut auf diese Art
float centerX = width/2;
float centerY = height/2;
int d = 400;
for (int i = 0; i < 360; i++)
{
float x = centerX + cos (radians (i)) * d;
float y = centerY + sin (radians (i)) * d;
point (x, y);
}
X-Position der Kreismitte
Y-Position der Kreismitte
Kreisdurchmesser
Schleife 360x durchführen
X-Position berechnen
Y-Position berechnen
Punkt an Stelle »X,Y« Zeichnen
DATENVISUALISIERUNG
www.visualcomplexity.com
VISUALIZER delegiert und erzeugt
alle visuellen Effekte. Das reicht von
der Textvisualisierung / Grafik bis hin
zur Erstellung des Fensterglaseffektes,
welcher in den Instanzen der Klasse
»TextDisplayer« als Hintergrundbild
verwendet wird.
TEXTANALYZER lädt eine Text-Datei
(.txt) in den Processing-Sketch, analysiert diesen und legt mithilfe eines
»Divide & Conquer« Verfahrens eine
alphabetisch sortierte Liste vom Typ
»Word« an.
TEXTDISPLAYER ist für die Anzeige
des Textes verantwortlich. Die Klasse
erzeugt die notwendigen Zeilenumbrüche und eine interaktive Scrollbar,
falls der Text nicht in das Ausgabefenster passen sollte.
WORD speichert das Wort selbst ab,
wie häufig es im Text vorhanden ist
und die Position(en), an der das jeweilige Wort gefunden wurde.
und Weise halbiert werden. Diese Suchmethode, heutzutage bekannt als Binäre Suche, geht bereits auf die Babylonier zurück.«18
17 vgl. Vazirani, Umesh V.: Algorithms, S. 1
18 wikipedia.de: Teile und herrsche (Informatik)
BILD http://www.flickr.com/photos/dianalange/sets/72157627657832455/
VIDEO http://vimeo.com/31203226
CODE http://www.openprocessing.org/sketch/44133
31
Text
Innerer Kreis: Der gesamte Text wird in seiner original Reihenfolge am Kreis angeordnet. Dazu wird der Text aus einer
externen Datei geladen und in einzelne Wörter untergliedert, welche in einem Array zwischengespeichert werden.
Äußerer Kreis: Mit Hilfe eines »Divide & Conquer« Suchalgorithmus wird eine alphabetisch sortierte Liste aller unterschiedlichen Wörter angelegt. Das heißt, für jedes neue
Wort wird ein Listeneintrag erstellt; gleichzeitig wird abgespeichert, wie häufig jedes Wort gefunden wurde. Diese
sortierte Wortliste wird am äußeren Kreis angeordnet.
Äußerer Kreis: Je öfter ein Wort im Text gefunden wurde,
desto größer ist die Schriftgröße.
Linien: Es wird eine Linie gezeichnet, wenn das Wort auf
dem äußeren Kreis mit dem auf dem inneren Kreis übereinstimmt. Dazu werden die zwei Arrays (Originaltext +
alphabetisch sortierte Liste) miteinander verglichen. Um
eine kurvige Linie zu erhalten werden jeweils zwei Kontrollpunkte berechnet, welche sich zwischen dem äußeren und
dem inneren Kreis befinden.
Interaktive Elemente: Die Arbeit ist sowohl als Grafik als
auch als App gedacht. Um letzteren gerecht zu werden,
sind ein paar kleine Interaktionen möglich: Wenn ein User
sich mit der Computermaus einem Wort auf dem äußeren
Kreis nähert, werden die Linien zwischen äußeren und inneren Kreis rot eingefärbt. Auf diese Weise kann überprüft
werden, an welchen Stellen das jeweilige Wort im Originaltext vorkommt. Des weiteren werden beim drücken der
Leertaste zwei Fenster über die Grafik gelegt, in welchen
der Originaltext als Lauftext und die alphabetisch sortierte
Liste gezeigt wird.
Fertige Grafik: Die Wörter auf dem äußeren Kreis werden
durch Kreise ersetzt. Je größer der Kreis ist, desto häufiger
wurde das Wort, wofür der Kreis steht, gefunden.
Wenn ein Wort mehr als einmal im Text vorkam, kann der
Kreis eine rote Umrandung erhalten. Dafür muss eine weitere Bedingung erfüllt werden: Die Linienstärke der Umrandung wird umso dicker, je länger das Wort ist. Die so
berechnete Linienstärke darf aber nicht größer sein, als der
Radius des jeweiligen Kreises.
33
Projekte
Weave
FLICKR API
www.flickr.com/services/api/
PROXML
www.creativecomputing.cc/p5libs/proxml/
HYPERBOLIC CORAL
www.openprocessing.org/sketch/9406
19 vgl. lexikon.martinvogel.de: API
20 vgl. www.sumo.de: Definition: API
21 vgl www.creativecomputing.cc/p5libs/proxml/
22 vgl. J. Wolf: C++ von A bis Z S. 657
API
API ist die Kurzform von »Applied program interface« und bedeuted übersetzt »Schnittstelle für Anwendungsprogramme«.19
APIs ermöglichen den Zugriff auf Daten um diese beispielsweise
für Anwendungen zu nutzen.20
Dieses Projekt entstand durch eine Kooperation mit der Zeitschrift »Weave«.
Dabei ist die Covergestaltung für die
Ausgabe 1.12 (Februar/März 2012)
entstanden.
proXML
proXML ist eine Erweiterung für Processing, welche das Lesen
und Schreiben von XML-Dateien erlaubt.21 Dadruch können externen Daten über eine API in Processing eingebunden und wei-
SKETCH EINS
IMAGEFROMAPI lädt Bilddateien
über die flickr API in Processing und
veranlasst, dass diese analysiert werden und das Resultat als Textdatei abgespeichert wird.
IMAGEANALYZER anlysiert das Bild
nach seinen Farben und Farbanteilen.
COLORSAVER enthält den Farbwert,
wie häufig und wo im Bild die Farbe
gefunden worden ist.
SKETCH ZWEI
LOADIMAGEDATA lädt die im ersten Sketch erstellten Textdateien, welche die Farbinformationen enthalten,
und speichert diese Daten in ein Array
vom Datentyp »Color«.
COLOR enthält die Farbdaten, welche in »LoadImageData« geladen
worden sind.
VISUALISER ist für die grafische Ausgabe der Daten verantwortlich.
ter verarbeitet werden.
Exceptions
In der Programmierung ist es durch das Exception-Handling möglich unerwartete Fehler aufzufangen, ohne das gleich das gesamte Programm abstürzt.22 Dies ist hilfreich, wenn mit schwer kalkulierbaren Daten gearbeitet werden muss. Gerade das Arbeiten
mit den Daten von einer API bietet viele mögliche Fehlerquellen:
Die Daten können nicht gefunde werden, nicht geladen werden,
das Dateiformat kann fehlerhaft sein usw.
BILD http://www.flickr.com/photos/dianalange/sets/72157629503336271/
35
Weave
Die erste (umgesetze) Idee für das Cover der Weave war es, abstrakte Grafiken aus Bildern zum Thema »Karneval«
zu generieren. Dazu werden Bilddaten
mit Hilfe der Library »proXML« von
flickr geladen. Die Bildsuche erfolgt
nach Suchbegriffen, in diesem Fall passend zum Thema Karneval (»Jecken«,
»Fasching«, usw.). Die gefundenen
Fotos werden anschließend farblich
analysiert, d.h. es wird geschaut welche Farben im Bild vorkommen und
wie oft. Diese Daten werden dann
in verschiedenen Formen visualisiert.
Je nach Experiment werden Kreise
und/oder geschwungene Linien mit
viel Zufall kombiniert. Gemeinsamer
Nenner dabei bleibt, dass jedes grafische Element jeweils für eine gefundene Farbe steht und je größer bzw. län-
ger es ist und je dicker die Linienstärke
ist, desto häufiger wurde diese Farbe
gefunden.
37
Weave
Links: Die Farbgrafiken werden in Cinema 4D als Textur für dreidimensionale Objekte weiterverwendet.
Unten: Die in Processing erstellten
»Korallen« (Original von Kerrin Jefferis und Patrick Stein) werden verformt
und zu einem Kopfschmuck collagiert.
Zum besseren Vergleich werden bereits veröffentlichte Covergestaltungen betrachtet: Was war gut, was nicht?
Oben: Auch die in Cinema 4D modellierte Maske wird mit einer zuvor erstellten Farbgrafik belegt.
Rechts: Verschiedene Varianten werden ausgetestet (Tiefenschärfe, Farbe,
Stereoskopie, usw.).
Links: In Abhängigkeit vom
Coverlayout wird der optimale Bildausschnitt gesucht.
Hier werden die erstellten Grafiken mit dem Coverlayout
der Weave gezeigt. Es stellt sich heraus, dass die »Strichzeichnungen« für ein Cover zu »unspektakulär« sind und
außerdem nicht gut mit dem Layout harmonieren. Daher
wird sich dem Thema »Karneval« im nächsten Schritt plakativer genähert, in Form einer Venezianischen Maske.
39
Projekte
Unsere ganze Geschichte ist bloß Geschichte des
wachenden Menschen; an die Geschichte des schlafenden hat noch niemand gedacht.
Georg Christoph Lichtenberg, zitate-aphorismen.de
Schlaf
BILD http://www.flickr.com/photos/dianalange/sets/72157629571704035/
DATALOADER lädt die Daten in das
Programm und bereitet diese für den
weiteren Verlauf auf. Dabei wird überprüft, ob bei allen Schlafkurven die
gleiche Anzahl an Daten vorhanden ist
(Vollständigkeit der Daten) und wandelt die als String geladenen Daten in
Zahlenwerte um.
SLEEPCURVE enthält die in »DataLoader« geladenen Werte als Array,
SLEEPSPHERE erstellt das Mesh basierend auf den Schlafdaten.
Punkten ein Polygonnetz erzeugt. Daher muss entweder mit einer
externen Libraries gearbeitet werden oder man baut sich die ein-
P1
P4
P2
P3
...
P1
P3
P5
P7
P9
P11
P13
P2
P4
P6
P8
P10
P12
P14
...
endShape();
ne mitgelieferte Funktion, welche aus einer Menge an gegebenen
...
beginShape(TRIANGLE_STRIP);
oder eines dreidimensionalen Körpers.23 In Processing gibt es kei-
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
den Polygonen. Diese dienen der Beschreibung einer Oberfläche
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
ter«. Ein »Mesh« besteht aus einer Menge kleinerer Elemente,
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
tergrafik verwendet und heißt übersetzt nichts anderes als »Git-
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
Dieser aus der Geometrie stammende Begriff wird in der Compu-
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
Mesh
beginShape();
P1, P2, P3, P4
endShape(CLOSE);
»Schlaf« ist eine Arbeit zum Thema
Datenvisualisierung. Die Idee ist, ein
personalisiertes Objekt zu schaffen,
welches die Daten des eigenen Schlafrythmuses zeigt. Dieses Objekt könnte
dann beispielsweise als Schmuck getragen werden.
PAUL BOURKE: SURFACE (POLYGONAL) SIMPLIFICATION
www.paulbourke.net/geometry/polygonmesh/index.html
PAUL BOURKE: SPHERE GENERATION
www.paulbourke.net/miscellaneous/sphere_cylinder/
zelnen Polygone selber.
23 vgl. wikipedia.de: Gittererzeugung
Hier werden zwei Varianten der manuellen Polygonnetzerzeugung in Processing gegenüber gestellt. Links werden
jeweils vier Punkte (P1, P2, P3, P4) miteinander verbunden;
danach wird die Form geschlossen. Der Nachteil bei diesem
Vorgehen ist, dass auf diese Weise die Funktionen »beginShape()« (Polygon beginnen) und »endShape()« (Polygon
schließen) sehr häufig aufgerufen werden, sehr viele, einzelne Polygone erzeugt werden und damit der Speicherbedarf und der Rechenaufwandt sehr groß sind.
Um einiges eleganter ist die Lösung mit dem zusätzlichen
Parameter »TRIANGLE_STRIP«, wodurch mit nur einem mal
Aufrufen von »beginShape()« ein Band aus einer Vielzahl
von Vertexpunkten erstellt werden kann.
41
Schlaf
Oben links: Die Grundform
basiert auf einer Kugel.
Oben mitte: Auf die kugelige
Grundform werde die Schlafdaten gelegt. Jedes Band enthält die
Daten einer Nacht. Später werden
noch Zwischenstufen berechnet
um so eine lückenlose Form zu erhalten.
Oben rechts: Gezeigt werden die Beispieldaten
einer Woche Schlaf. Jeder der Streifen steht für
eine nächtliche Schlafperiode. Diese Daten werden als Textdatei abgespeichert und in das Programm geladen.
Links: Zu sehen ist eine Reihe von
Zustandsrenderings die während des
Arbeitsprozesses entstanden. Die verschiedenen Experimente führten letztenendlich zu einer reduzierten Farbgebung und einer Veränderung der
Form von einer »stacheligen Kugel«
zur fertigen »Schlafblume«.
Diese Seite: Oben zu sehen ist eine in
Processing gerenderte Schlafblume.
Das 3D-Modell wird als »DXF« Datei exportiert und kann damit in allen gängigen 3D-Programmen weiter
verarbeitet werden. Auf diese Weise
entstand das untere Bild: In Cinema
4D kann die »DXF« Datei geladen und
das enthaltene Objekt mit realistischen
Materialien belegt werden.
43
Projekte
Der Baum, der den einen zu Glückstränen rührt, ist in den Augen des anderen nur ein grünes Ding, das im Weg steht. Manche
betrachten die Natur als lächerlich und deformiert [...] und einige
sehen die Natur überhaupt nicht. Doch in der Augen des Menschen mit Fantasie, ist die Natur Fantasie selbst.
William Blake in Natur und Design S. 17
Ast/Blume
BILD http://www.flickr.com/photos/dianalange/sets/72157628815886507/
CODE http://www.openprocessing.org/sketch/49159
Manchmal fängt man mit einem Projekt an und hat genau im Kopf, was
dabei heraus kommen soll. Auf dem
Weg dorthin kann es jedoch durch
eine Vielzahl von Zufällen vorkommen, dass etwas ganz anderes, womöglich besseres dabei entsteht. In
diesem Fall wollte ich eine Art Pusteblume programmieren. Aber spätestens nach dem Einbauen einer rekursiven Funktion ergab sich etwas Neues:
Ein Gebilde aus feinen, astähnlichen
Strukturen, welche kreisförmig angeordnet immer noch an die ursprüngliche Intension der Blume erinnern.
Rekursion
In der Programmierung gibt es zwei Möglichkeiten bestimmte
Augaben zu lösen. DIe erste Variante ist das iterative, lineare
Programmieren. Hierbei wird das Progamm nacheinander, in einer klaren Reihenfolge ausgeführt. Rekusive Funktionen hingegen rufen sich selber wieder auf. Generell können die meisten
Probleme sowohl iterativ als auch rekursiv gelöst werden. Der
Vorteil beim rekusiven Programmieren liegt darin, dass der Programmiercode häufig um einiges kürzer ist als die iterative Lösung umd damit für den Programmierer einfacher zu lesen ist.
Natürlich hat diese Arbeitsweise auch einige Nachteile. So muss
zum Beispiel bei jedem Aufruf der Funktion erneut Speicher für
die lokalen Variablen allokiert werden, was dazu führen kann,
dass der zur Verfügung stehende Arbeitsspeicher relativ schnell
ausgelastet wird. Dies wiederum kann zum Abstürzen des Programmes führen.24
24 vgl. Fleischer, Kevin: Rekursion und Iteration S. 2 ff
FLOWER erstellt ein Array vom Datentyp »BranchCreator«. Außerdem
enthält »Flower« die Daten, wie viele Äste gezeichnet werden sollen, wo
die Grafik positioniert ist und welchen
Durchmesser sie haben soll.
BRANCHCREATOR erstellt mit Hilfe
einer rekursives Funktion die einzelnen Astabschnitte. Diese werden als
Instanten vom Datentyp »BranchDrawer« in einer ArrayList gespeichert.
BRANCHDRAWER enhält die Koordinaten des jeweiligen Astes und berechnet eine Kurvenform aufgrund des
Anfangs- und Endkoordinaten. Darüber hinaus ist »BranchDrawer« für das
Zeichnen des Astes verantwortlich.
45
Ast/Blume
#5
#1
#7
#2
#6
Hier wird gezeigt, wie die Veränderung bestimmter Parameter das Aussehen von »Ast/Blume« beeinflussen.
#1 und #2 In »Flower« wird die maximale Länge der einzelnen Äste über
eine Noisefunktion (def. »noise« siehe
Projekt »Kugel«) bestimmt. Die Winkel werden per Zufallsfunktion festgelegt.
#3 und #4 Bei gleichbleibendem Winkel wird der Grad der Längenänderung
der »Kindäste« (jüngere Astsegmente,
die von einem älteren Astsegment abzweigen) variiert. Nummer 3 ergibt
sich bei geringer Längenänderung
(z.B. mind. 80% der Länge des »Mutterastes), Nummer 4 bei hoher Längenänderung.
#5 bis #8 Bei diesen Beispielen bleibt
der Längenänderungsfaktor konstant
und die Winkel vergrößern sich schrittweise.
#9 und #10 Bei allen erzeugten Ästen
ist die maximale gleich, wodurch sich
eine kreisartige Außenform ergibt.
#8
#3
#10
47
#9
#4
Projekte
Wir können [...] nach funktionalen Erklärungen für die Dinge
suchen, die uns in der Natur gefallen, etwa die Farbgebung eines
Vogelkleides oder die Form eines Blattes. Es ist tröstlich, dass die
Dinge eventuell nicht zufällig so sind, auch wenn wir sie nicht
ganz verstehen.
Baum
Alan Powers, Natur und Design S. 9
BILD http://www.flickr.com/photos/dianalange/sets/72157628903145341/
CODE http://www.openprocessing.org/sketch/49159
»Baum« ist genau genommen kein
eigenständiges Projekt, sondern einer
Weitentwicklung von »Ast/Blume«.
Da bei dem vorangegangenem Projekt
eine astartige Struktur entstand, war
es nur logisch, daraus naturalistische
Bäume zu formen. Hierfür mussten
Programmiercode und einige Parameter nur minimal verändert werden.
TREE erstellt ein Array vom Datentyp
»BranchCreator«. Außerdem enthält
»Tree« die Daten, wie viele Äste gezeichnet werden sollen, wo die Grafik
positioniert ist und welchen Durchmesser sie haben soll.
BRANCHCREATOR erstellt mit Hilfe
einer rekursives Funktion die einzelnen Astabschnitte. Diese werden als
Instanten vom Datentyp »BranchDrawer« in einer ArrayList gespeichert.
BRANCHDRAWER enhält die Koordinaten des jeweiligen Astes und berechnet eine Kurvenform aufgrund des
Anfangs- und Endkoordinaten. Darüber hinaus ist »BranchDrawer« für das
Zeichnen des Astes verantwortlich.
BLATT bzw. BLUEHTE zeichnet ein
Blatt bzw. eine Blühte an einer bestimmten Position.
Exkurs: Punkte auf einer Kugel berechnen
float centerX = width/2;
float centerY = height/2;
float centerZ = 0;
int d = 400;
for (int i = 0; i < 360; i++)
{
for (int j= 0; j < 360; j++)
{
float x = centerX + sin (radians (i)) * cos (radians (j)) * d;
float y = centerY + sin (radians (i)) * sin (radians (j)) * d;
float z = centerZ + cos (radians (i)) *d;
point (x, y, z);
}
}
X-Position der Kugelmitte
Y-Position der Kugelmitte
Z-Position der Kugelmitte
Kugeldurchmesser
erste Schleife 360x durchführen
zweite Schleife 360x durchführen
X-Position berechnen
Y-Position berechnen
Z-Position berechnen
Punkt an Stelle »X,Y,Z« Zeichnen
49
Baum
Links: Hier werden die einzelnen
Schritte gezeigt, wie sich aus der kreisförmigen »Blume«, über eine buschartige Form schließlich der »Baum« entwickelt hat.
Oben: Im Vergleich zur »Blume« verschachteln sich die einzelnen Äste
mehr in kleinere Unteräste. Zusätzlich
nimmt die Strichstärke zu den Spitzen
hin ab, was mehr dem Aussehen eines natürlichen Baumwachstums entspricht.
Unten: Um ein noch naturalistischeres
Bild zu schaffen, werden unterschiedlich große und eingefärbte Blätter und
Blühten hinzugefügt.
51
Projekte
[In den Werken des Baron Cuvier sieht man], wie die Natur in ihrem Fortschreiten trotz ihrer Abwechslung und ihres unermesslichen Reichtums doch in ihren
Fundamentalformen und Motiven äusserst sparsam und ökonomisch bleibt.
Dasselbe Skelett wiederholt sich fortwährend, jedoch mit unzähligen Änderungen, welche wieder teils durch die allmähliche Entwicklung der Individuen, teils
durch die Existensbedingungen, welche sie zu erfüllen hatten, modifiziert werden.
Pflanzen
Gottfried Semper, Entwurf eines Systems der vergleichenden Stillehre
Durch diverse Internetseiten, welche
sich mit der Programmierung von
pflanzlichen Strukturen befassen, wurde ich auf die sogenannten »L-Systeme« aufmerksam. Das interessante
an diesen Systemen ist es, dass sehr
unterschiedlich aussehende Pflanzen
damit generiert werden können. Kernstück jeder Pflanze ist ein Regelwerk
(Axiom und Ersetzungsregel, siehe
beistehende Definition). Jede kleinste Änderung an der Ersetzungsregel
bewirkt eine wahrnehmbare Veränderung in der Pflanzengestalt. Daher
gibt es in diesem Projekt zum einen
Varianten bereits bekannter L-Systeme, welche z.B. auf der Internetseite
von Paul Bourke veröffentlicht sind,
aber auch komplett neu entwickelte
Systeme, welche durch Experimente
entstanden. Diese haben nicht den
Anspruch, eine real existierende Pflanze nachzuempfinden. Vielmehr sollen
sie so aussehen, als ob die Pflanze so
existieren könnte.
Lindenmayer-System
L-Systeme sind grammatische Modelle zur Erstellung realisitischer Pflanzenstrukturen.
Benannt wurden das 1968 entwickelte System nach dem Botaniker Aristid Lindenmayer.
Er transformierte den regelbehafteten Aufbau von Pflanzen in ein Ersetzungssystem. In
einem einfachen Beispiel wird die Funktionsweise deutlicher: Am Anfang ist das Zeichen »F« (Axiom) gegeben, welches durch die Zeichenfolge »F+F« ersetzt werden soll.
Nach einer Ersetzung erhält man nun »F+F«, nach der zweiten »F+F+F+F«. Die auf
diese Weise entstandene Zeichenkette wird dann als Grafik interpretiert, wobei jedem
Zeichen eine explizite Bedeutung zugeordnet ist (siehe Tabelle auf gegebüberliegender
Seite).25
F
f
+
|
[
]
#
!
@
{
}
<
<
&
(
)
Vorwärtsbewegung um eine Linienlänge & Zeichnen der Linie
Vorwärtsbewegung um eine Linienlänge ohne Zeichnen der Linie
Drehung nach Links um gegebenen Winkel
Drehung nach Rechts um gegebenen Winkel
Drehung um 180°
Speichern des aktuellen Zustandes (Winkel, usw.)
Zurückkehren zum vorher gespeicherten Zustand
Erweiterung der Linienlänge um bestimmten Wert
Verminderung der Linienlänge um bestimmten Wert
Punkt zeichnen
Ein Polygon beginnnen
Ein Polygon schließen
Die Linienlänge mit einem Wert multiplizieren
Die Linienlänge durch einen Wert dividieren
Die Bedeutung von + und - tauschen
Erweiterung des gegebenen Winkels um einen bestimmten Wert
Verminderung des gegebenen Winkels um einen bestimmten Wert
BIOLOGIE & INFORMATIK
www.algorithmicbotany.org
RULE enthält die Ersetzungsregel des
L-Systems als zwei Stringvariablen:
das zu suchende Zeichen und den Inhalt, mit welchem dieses ersetzt werden soll.
RULELIBRARY enthält das Axiom
und ein Array mit allen Ersetzungsregeln vm Datentyp »Rule«
LSYSTEM generiert mithilfe einer
übergebenen »RuleLibrary« und einer
festgelegten Iterationsanzahl eine Kette von Zeichen vom Datentyp String.
Diese Zeichenkette repräsentiert die
jeweilige Pflanze. Dabei erfolgt die
Erzeugung des Strings nach den gegebenen Ersetzungsregeln von »RuleLibrary«.
TREE interpretiert die in »LSystem«
erstellte Zeichenkette mit grafischen
Elementen (siehe Tabelle).
BRANCH zeichnet einen Ast mit gegebenen Anfangs- und Endkoordinaten und festgelegtem Aussehen.
BLATT bzw. BLUEHTE zeichnet ein
Blatt bzw. eine Blühte an einer bestimmten Position.
25 vgl. F. Breier: L-Systeme und andere künstliche Pflanzen S 4ff.
26 vgl. P. Bourke: L-System User Notes
BILD http://www.flickr.com/photos/dianalange/sets/72157629206948652/
MEHR BILD http://www.flickr.com/photos/dianalange/sets/72157628985797345/
CODE http://www.openprocessing.org/sketch/49814
Im Lindenmayer-System repräsentiert jedes Zeichen eine bestimmte grafische
Komponente. In dieser Tabelle finden sich alle vereinheitlichten Zeichen und
ihre Bedeutung.26 Natürlich ist es problemlos möglich, weitere Zeichen und Bedeutungen hinzuzufügen. Beispielsweise wurde das System bei meinen Pflanzen noch um die Zeichen »B« für Blühte zeichnen und »G« für Blatt zeichnen
erweitert.
53
Pflanzen
Wolken sind keine Kugeln, Berge keine Kegel,
Küstenlinien keine Kreise. Die Rinde ist nicht glatt – und auch
der Blitz bahnt sich seinen Weg nicht gerade.
Benoît B. Mandelbrot, The Fractal Geometry of Nature
#1
#2
#3
#4
Im Gegensatz zu den in der Natur vorkommenden Pflanzen, sehen alle Strukturen, welche mit
demselben L-System erzeugt wurden, identisch
aus. Demnach muss ein Verfahren eingesetzt
werden, um einzelne Elemente zu variieren, ohne
aber den Gesamteindruck der »Pflanzenart« zu
zerstören. Eine Möglichkeit ist die Verwendung
von Stochastischen L-Systemen. Dabei gibt es
für ein Zeichen mehrere Ersetzungsregeln. So
könnte zum Beispie »F« mit »F[+F]F[-F]F« oder
»F[+F]F« oder »F[-F]F« ersetzt werden. Welche
der Ersetzungsregeln angewandt wird, wird per
Zufall entschieden.27 Eine andere Möglichkeit ist,
das L-System nicht deterministisch aufzufassen,
sondern kleine Mengen an Zufallsfaktoren hinzuzufügen. Letztere Variante wird schrittweise
auf dieser Doppelseite dargestellt.
#6
#7
#5
27 vgl. F. Breier: L-Systeme und andere künstliche Pflanzen S 8 f.
#1 Alle mit dem L-System erzeugten Pflanzen sehen identisch aus.
#2 Statt Geraden werden Kurven verwendet, wobei jeweils ein variabler Kontrollpunkt zwischen Start- und Endpunkt des Baumsegmentes eingefügt wird.
#3 Die Winkel werden mit einem Zufallsfaktor
modifiziert.
#4 Die einzelnen Ast- und Baumsegmente haben
nun unterschiedliche Längen.
#5 Die Linienstärke nimmt zu den Ästen hin ab.
#6 An die Äste werden Blätter gesetzt. Diese
werden als Bild in das Programm geladen.
#7 Die Größe und die Farbe der Blätter variiert.
55
Pflanzen
#8
#1
#7
#4
#9
#2
#3
In dieser Übersicht werden unterschiedliche LSysteme, bestehend aus einem Axiom und den
dazugehörigen Ersetzungsregeln, ihren grafischen Repräsentationen gegenüber gestellt.
#5
#6
#10
#11
#12
#1 Axiom X
#2 Axiom a
#4 Axiom XY
#6 Axiom X
#8 Axiom VZFFF
#9
#10 Axiom F
#12 Axiom F
F --> FF
F --> >F<
X --> X[-FF][+FF]
F --> FF
V --> [+++W][--W]XV
Axiom [[+F]+F][X+[-X]][-F+X]
F --> F[+F]F[-F]F
F --> FF-[XY]+[XY]
X --> F-[[X]+X]+F[+F]-X
a --> F[+x]Fb<
Y --> YFX[+Y][-Y]
X --> F[+X][-X]FX
W --> +X[-W]Z
F --> FFb[+X][-F]aX
#11 Axiom FFF
X --> +FX
#3 Axiom F
b --> F[-y] Fa
#5 Axiom X
#7 Axiom FX
X --> -W[+X]Z
X --> [FF[+X]]
F --> F[+FF][-FF]F[-F][+F]F
Y --> -FX
F --> F[-F]F[+F][F]
x --> a
F --> FF
X --> FF[-FX]+FX
Y --> [+FF]YZ
a --> F[-F]
y --> b
X --> F[+X]F[-X]+FX
Z --> [+FF]F
b --> aXF
57
Projekte
Es geht nicht darum, Naturformen zu kopieren, sondern darum, in die Naturprozesse einzudringen und sie durch den menschlichen Geist umzuwandeln,
ohne sie zu denaturieren.
Alan Powers, Natur und Design S. 11
Stengel
Inspirit ist dieses Projekt von den mikroskopischen Aufnahmen der Querschnitten von pflanzlichen Wurzeln
und Sprossachsen. Charakteristisch für
diese Ansichten sind die klar erkennbaren Zellstrukturen, welche sich ringartig in lockeres und dichteres Gewebe
untergliedern. Ein weiterer Gedanke
bei dem Projekt war, dass die generierten Sprossachse nicht beliebig sind,
sondern hinter jeder Grafik eine Bedeutung steht. In diesem Fall wurden
die Daten von Fotos, genauer gesagt
die Farbanteile, dazu herangezogen.
Voronoi
Ein Voronoi-Diagramm zerlegt einen gegebenen Raum in Regionen basierend auf einer gegebenen Menge von Punkten. Dabei
nimmt jeder Voronoi-Punkt genau eine Region ein. Die Regionen
haben die Eigenschaft, dass alle Positionen innerhalb der jewei-
LEE BYRON: MESH LIBRARY
www.leebyron.com/else/mesh/
ligen Region ihrem Voronoi-Punkt näher ist, als allen anderen
Voronoi-Punkten.28
28 vgl. C. Raskob: Schwerpunkt-Voronoi-Diagramme S. 11
IMAGEFROMAPI lädt Bilddateien
nach einem bestimmten Suchbegriff
über die flickr API in das Programm
und veranlasst, dass diese analysiert
werden.
IMAGEANALYZER anlysiert das Bild
nach seinen Farben und Farbanteilen.
COLORSAVER enthält den Farbwert,
wie häufig und wo im Bild die Farbe
gefunden worden ist.
SEGMENTS erzeugt aus den Ergebnissen von »ImageAnalyzer« Ringe,
welche jeweils den prozentualen Farbanteil des jeweiligen Bildes repräsentieren. Innerhalb von diesen Ringen
werden per Zufall Punkte verteilt, welche dann die Grundlage für die Voronoi-Regionen bilden. Da nicht alle
Punkteverteilungsvarianten ein funktionierendes Voronoidiagramm ergeben, könnte das Programm an dieser
Stelle abstürzen. Diese Fehlerquelle
wird mit einer »Exception« aufgefangen.
DISPLAYER erzeugt aus den in »Segments« erstellten Punkten VoronoiRegionen. Diese werden dann mit der
in »ImageAnalyzer« gefundenen Farbe gefüllt.
BILD http://www.flickr.com/photos/dianalange/sets/72157629453008849/
Ein mit Lee Byrons Mesh Library erstelltes Voronoi-Diagramm mit zufällig verteilten Voronoi-Punkten (blau).
59
Stengel
Ähnlich dem Weave-Projekt basiert auch diese Arbeit auf
einen Algorithmus, der die Farbanteile von Fotos analysiert. Daher konnte ein Teil des Codes aus dem WeaveProjekt weiterverwendet werden. Schritt eins ist also, ein
Foto in das Programm zu laden. Dies kann entweder direkt
eine Bilddatei sein oder ein Foto wird mittels der Library
»proXML« über die flickr API gesucht (Bild oben). Sobald
das Bild geladen wurde, wird es nach seinen Farben und
den Farbanteilen analysiert. Aufgrund dieser Daten werden
Ringe angelegt, welche jeweils den prozentualen Anteil der
gefundenen Farbe repräsentieren. Je dicker also ein Ring
ist, desto häufig kommt die Farbe im Bild vor (Bild unten).
Innerhalb von diesen Ringen werden zufällig Punkte verteilt. Die Dichte der Punkte gibt den Helligkeitswert der
Farbe an (Bild oben). Diese Punkt werden dann einer Instanz der Klasse »Voronoi«, welche durch die Einbindung
der »Mesh« Library verwendet werden kann, übergeben.
Diese berechnet daraus das Voronoi-Diagramm. Die Ko-
ordinaten sämtlicher Eckpunkte aller entstandenen Zellen
können über »Voronoi« abgefragt werden. Dadurch ist es
möglich, das Aussehen der Zellen manuell zu konfigurieren
und sie entweder eckig oder eher rund aussehen zu lassen
(Bild unten).
61
Projekte
EinTeil der allgemeinen Lektion der Natur ist das
Verständnis, wie Ordnung und Chaos zueinander in
Beziehung stehen.
Alan Powers, Natur und Design S. 33
Weltall
Elementarer Bestandteil dieses Projektes ist das Prinzip von Ordnung
und Chaos. Wie viel Ordnung bzw.
Gleichmäßigkeit verträgt ein Objekt,
ohne dass dieses nach Geometrie und
Mathematik aussieht? Und wie viel
Unordnung verträgt es, ohne dass es
beliebig wird? Visualisiert wird dieses
Thema als Variationen von Himmelskörpern, welche über ein Raster, Zufall
(random) und Rauschen (noise) erzeugt werden.
ZUFÄLLE GIBT‘S!
http://magazin.c-plusplus.de/artikel/
Zuf%E4lle%20gibt%60sFragezeichenAusruf
ezeichen%20-%20Funktionen%20rund%20
um%20rand%2C%20Random%20und%20
den%20Zufall
RANDOM IN PROCESSING
www.openprocessing.org/sketch/59360
Zufall
Der Zufall in der Informatik ist eng Verbunden mit der Wahrscheinlichkeitsrechnung, denn Computer können nicht wirklich
zufällig arbeiten, sondern jeglicher Zufall wird über eine Algorithmus simuliert.29 In Processing geschieht die Erzeugung von
Zufallszahlen über die Funktion »random (min, max)«, wobei
eine zufällige Zahl zurück gegeben wird, welche sich innerhalb
des angegebenen Minimal- und Maximalwertes befindet.
29 vgl. magazin.c-plusplus.de: Zufälle gibt‘s!
BILD http://www.flickr.com/photos/dianalange/sets/72157629572630943/
CODE http://www.openprocessing.org/sketch/31151
Die Grafik ist eine Visualisierung der Zufallsfunktion »random()« in Processing. Gegeben
ist ein Wertebereich, in diesem Fall von Null bis 100. Bei jedem Loop soll random() eine
Zahl aus diesem Wertebereich auswählen. Jeweils ein Balken der Grafik stellt eine Zahl dar.
Je öfter eine Zahl per random() ausgesucht wurde, desto höher ist der Balken. Der blau
hinterlegte Balken steht für die Zahl, die am häufigsten ausgewählt wurde, der blaue Kreis
die am wenigsten ausgewählte Zahl. Die Grafik zeigt die Häufigkeitsverteilung der ausgewählten Zahlen nach 1.000.000 Durchgängen. Die häufigste Zahl war die Nummer 43
(10217 mal ausgewählt, entspricht 1,02%), die geringste Zahl war die Nummer 75 (9752
mal ausgewählt, entspricht 0.98%). Daraus lässt sich schlußfolgern, das der in Processing
verwendete Zufallsalgorithmus nur bedingt zufällig ist. Denn er hat deutliche Tendenzen,
welche Zahlen generiert werden und welche nicht.
63
Weltall
Der Mond ist ein Zusammenspiel aus zwei Elementen: Zuerst werden auf den Umfang eines Kreises zufällig Punkte verteilt, diese ergeben die äußere Kontur des Mondes.
Zweitens werden innerhalb dieses Mondkreises weitere
Punkte verteilt, welche sich jeweils auf den Umfang von
kleineren Kreisen befinden. Diese kleineren Kreise simulieren die Krater des Mondes. Anschließend werden viele Linien zwischen je zwei zufällig gewählten Punkten gezeichnet. Durch die Verdichtung der Linien entsteht sowohl die
Struktur der Mondoberfläche als auch die leicht dreidimensionale Wirkung.
Auf drei verschieden großen Kugeln werden zufällig Punkte gelegt. Auch hier werden anschließend viele Linien zwischen zwei zufällig gewählten Punken gezeichnet. Einzige
Bedingung ist, dass die zwei Punkte jeweils auf der gleichen
Kugel liegen. Zu beachten sind die Verdichtungen an den
Polen der Kugeln.
Hier wird eine Kombination von noise() und random() verwendet. Dabei variiert die Gewichtung des Zufalls und des
Pseudozufalls in Abhängigkeit von der Position auf der Kugel. Benachbart liegende Punkte werden miteinander verbunden und ergeben eine durchgängige Linie.
Die Basis für dieses Beispiel ist ein recht starr angelegtes
Raster mit nur wenig Variation. Das natürliche Aussehen
entsteht ausschließlich durch die Vielzahl an feinen, sich
kreuzenden Linien und der Drehung der Kugelformen im
Raum, so dass die Pole der Kugeln unterschiedlich positioniert sind.
65
Projekte
Ist die Natur langweilig? So scheint es, wenn sie als tote Materie dargestellt
wird, wie dies in wissenschaftlichen Fächern oft der Fall ist. Die Vorstellung der
lebenden Natur wurde von Dichtern und Visionären beschrieben, die oft als
Fantasten belächelt wurden. [...] Für den Designer lässt sich die Unterscheidung
nicht durch Experimente , sondern durch die Qualität der Arbeit nach der Natur
beweisen.
Alan Powers, Natur und Design S. 11
Kugel
KEN PERLIN: DER NOISE ALGORITHMUS
www.mrl.nyu.edu/~perlin/doc/oscar.html
JOSEPH NECHVATAL: IMMERSION INTO NOISE
www.openhumanitiespress.org/immersion-into-noise.html
WOLKENFLUG
www.openprocessing.org/sketch/56265
BILD http://www.flickr.com/photos/dianalange/sets/72157629206969340/
Rauschen
Rauschen beschreibt in der Physik eine Störgröße, welche durch
die Überlagerung von Schwingungen oder Wellen entsteht.30 Ge-
Heigtmap
läufige visuelle Beispiele sind u.A. das Bildrauschen bei hohen
Heightmaps oder Höhenfelder sind zweidimensionale Felder,
ISO-Werten in der Fotografie und der »Ameisenkrieg« bei feh-
welche der Beschreibung von Höhenreliefs dienen. Die Höhen-
lendem Senderempfang im Fernsehen. Dieses Phänomen kann
daten werden in einer Rastergrafik als Helligkeitswerte abgespei-
über ein mathematisches Modell beschrieben werden, genannt
chert. Das heißt, je höher der Wert ist, desto heller ist der Grau-
»Weißes Rauschen«.31
wert. Die zweidimensionale Grafik bildet demnach die Grundlage
für die Generierung der Oberfläche eines dreidimensianelen Objektes. Um das Relief zu erstellen wird die Rastergrafik abgetastet
Wie bereits bei dem Projekt »Stengel«
entstand diese Arbeit aufgrund meiner
Faszination für mikroskopische Aufnahmen. Daher ist es nicht verwunderlich, dass einige optischen Vorbilder
aus einer Gallerie eines Herstellers von
Mikroskopen (www.fei.com) stammen. Die Makroaufnahmen von Pollen, Kohle, Eisen, Algen, Sporen usw.
sind dabei ästhetische Grundlage. Was
nicht bedeuten soll, dass diese »nachgebaut« werden. Vielmehr sollen die
mit der Rauschfunktion erzeugten Kugeln daran erinnern und frei mit dem
Thema assoziiert werden.
und der Helligkeitswert bestimmt dann den z- bzw. Höhenwert
Perlin Noise
an einer bestimmten Position des Polygonnetzes. Diese Technik
Noise ist eine fraktale Rauschfunktion. Sie wird zur Bildsynthese
wird oft in der Computergrafik verwendet, da der Speicherauf-
natürlicher Phänomene, wie Wolken, Landschaften und Wasser,
wand sehr gering ist.34
verwendet.32 Ken Perlin, nachdem diese Funktion benannt wurde, hat Perlin Noise entwickelt um Sachen, z.B. Bilder und Oberflächen, unregelmäßig genug aussehen zu lassen, wodurch die-
NOISEMAKER erstellt mithilfe der
noise Funktion und/oder anderen Algorithmen ein Heightmap.
NOISESPHERE
interpretiert
das
Heightmap und generiert daraus ein
kugelartiges Objekt.
se interessanter und natürlicher erscheinen. Die Funktion selbst
macht nicht viel anderes, als ein einfaches, sich nicht wiederholendes Muster zu generieren. Noise gehört nicht zu den Zufalls-
30 vgl. wikipedia.de: Rauschen (Physik)
funktionen, Noise ist pseudozufällig.
31 vgl. wikipedia.de: Weißes Rauschen
33
32 vgl. wikipedia.de: Perlin Noise
33 vgl. Ken Perlin: Making Noise
34 vgl. wikipedia.de: Höhenfelder
67
Kugel
Auf dieser Doppelseite ist eine Auswahl der entstandenen Kugelobjekte zu sehen. Die Variationen wurden
über verschiedene Experimente mit
der Noisefunktion generiert. Unter anderem wurde das Rauschen mit Winkelfunktionen, bitweisen Operatoren
und dem booleschen Operator XOR
(Wahrheitsabfrage »Entweder Oder«)
verfremdet.
Eine Kombination aus noise() und bewusst eingebauten Störungen ergibt
das Heightmap.
Die Ausgangsform ist eine Kugel, welche aus 200x200 Polygonen besteht.
Zu sehen ist, dass sich das Gitter zu
den Polen hin verdichtet. Dieser Effekt entsteht durch die Abnahme des
Kreisdurchmessers und der gleichzeitig
konstanten Anzahl der Polygone pro
Kugelsegment.
Das erzweugte Heightmap dient als
Vorlage zur gezielten Deformation einer Kugel. Das in Processing gerenderte Bild weist deutliche »Zusammenfaltungen« an den Polen auf, welche
durch die Polygonnetzverdichtung an
diesen Stellen hervorgerufen werden.
Links:
Das als 3D-Modell im Dateiformat »DXF« exportierte Objekt wird in Cinema 4D
importiert. In dem 3D Programm erfolgt die Lichtsetzung, eine minimale Oberflächenglättung und eine Belegung des Objektes mit einem Material.
69
Projekte
BILD http://www.flickr.com/photos/dianalange/sets/72157629331606961/
CODE http://www.openprocessing.org/sketch/52738
Terrain
Ziel dieses Projektes war es, unterschiedliche, dreidimensionale Geländeformen über einen Algorithmus zu
generieren, welcher komplett ohne
manuelle Konfiguration funktioniert.
Die Idee für die programmiertechnische Umsetzung stammt von Thomas
Jourdan: Über eine Noisefunktion wird
ein Heightmap erstellt, welches nach
und nach über verschiedene Filter so
verändert wird, dass ein Terrain entsteht.
Random Walk
Der Random Walk, zu deutsch Zufallsbewegung oder auch Irrfahrt, basiert auf einem stochastischen Prozess. Er findet Verwendung in der Herleitung von Wahrscheinlichkeitsverteilungen.35
Unter Anderem kann auf diese Weise der zeitliche Verlauf beziehungsweise die Entwicklung von Marktpreisen nachvollzogen
werden.36
Grafisch kann dieser Vorgang als wandernde Linie beschrieben
werden, welche an einem zufälligen Punkt auf einer zweidimensionalen Fläche beginnt. Bei jedem Durchgang wird die Linie um
einen Punkt erweitert. Dabei wird zufällig entschieden, ob die
Linie nach oben, nach unten, rechts oder links weiter geht.
Zusammenfassend lässt sich der Random Walk durch folgende Eigenschaften definieren: Alle Einzelentscheidungen sind autonom.
Jeder Schritt hängt ausschließlich von der aktuellen Position ab
und nicht von den vorher besuchten Plätzen. Jeder Teilschritt
35 vgl. wikipedia.de: Zufallsbewegung
wird zu einem neuen Ausgangspunkt. Daher können Plätze
36 vgl. wikipedia.de: Random-Walk-Theorie
mehrmals aufgesucht werden und der daraus entstehende Pfad
37. vgl. D. Heermann: Der Random Walk S. 1
weist Kreuzungen auf.37
TERRAIN dient der Darstellung und
Anzeige der Landschaft. Die Klasse interpretiert das ihr übergebende zweidimensionale Bild und erstellt daraus
das dreidimensiale Gelände.
NOISEGENERATOR
erstellt
ein
Heightmap welches der Klasse »Terrain« anschließend als Bild übergeben
wird. »NoiseGenerator« erstellt dieses
Bild und verändert es nach und nach
durch eine Reihe von Filtern (z.B.
»RandomWalk«).
RANDOMWALK erstellt ein Bild,
welches eine wandernde, weiße Linie
mit zufälligem Verlauf und sich zufällig
verändernder Linienstärke auf schwarzem Grund beinhaltet.
WIE SIEHT DER ZUFALL AUS
www.random-walk.com
GENERATING RANDOM FRACTAL TERRAIN
www.gameprogrammer.com/fractal.html
INNER WORLD - A LANDSCAPE GENERATOR
www.innerworld.sourceforge.net
CRACKS erstellt ein Bild, welches
zufällig positionierte, astartige Linien
über ein rekusives Verfahren erstellt
und als Bild abspeichert.
ANCHOR steuert das rekursive Verfahren von »Cracks« und erzeugt die
einzelnen Astabschnitte.
BRANCH speichert die Anfangs- und
Endpositionen der einzelnen Linienabschnitte ab, welche in »Anchor« erzeugt wurden und erstellt daraus eine
geschwungene Linie.
71
Terrain
Über eine zweidimensionale Noisefunktion wird
ein Heightmap erstellt. Die Parameter für Noise,
d.h. wie zufällig oder natürlich das Muster ist,
werden zufällig bestimmt. Dadurch unterscheiden sich die generierten Geländeformen schon
anhand der Feinheit der Struktur.
Die Kontraste werden erhöht. Dadurch entstehen im Heightmap weiße, undifferenzierte Areale, welche in der 3D-Ansicht Flächen auf den
Berggipfeln ergeben. Da diese flachen Plateaus
unnatürlich wirken, wird anschließend das Bild
invertiert (»oben« wird mit »unten« getauscht).
Über ein RandomWalk-Prozess werden die Bergund Talregionen festgelegt.
Um die kleinen »Rauheiten« der Oberfläche zu
glätten wird das Heightmap über Mario Klingemanns »fastblur« Funktion leicht weich gezeichnet. Anschließend werden noch einmal die
Kontraste erhöht, um deutlichere Bergregionen
zu erhalten.
Die Landschaft wirkt nun insgesamt zu glatt und
zu gleichmäßg. Daher werden kleine Störungen
eigebaut. Realisiert werden diese über die gleichen Klassen, welche schon für die Generierung
von »Baum« und »Ast/Blume« verwendet wurden.
Diese Störungen entsprechen den natürlich vorkommenden Erosionen, welche durch die Umweltgegebenheiten entstehen.
Das nun fertige Modell wird als dxf-Datei exportiert.
In Cinema 4D wird das
Modell importiert, weiter
73
verarbeitet (Lichtsetzung,
Ausschnitt, usw.) und anschließend als hochauflösendes Bild gerendert.
Quellen
Quellen,
&
Links
Bildnachweis
QUELLEN
BILDNACHWEIS
LINKS
Breier, Florian: L-Systeme und andere künstliche Pflanzen (pdf).
Berlin, 2009 ••• Klanten, Robert; Hellige, Hendrik [Hrsg.]: Su-
cs.berkeley.edu/~vazirani/algorithms/chap2.pdf,
eingesehen
S.6: theverymany.com ••• S.8-9: #1 theverymany.com, #2 &
http://
http://apod.nasa.gov/apod/ap030425.
bourke.net/fractals/lsys/index.html ••• roxiemike.wordpress.
http://graphics.uni-ulm.de/lehre/courses/ss02/Computergra-
personic. Visuals for Music. Die Gestalten Verlag GmbH & Co.
am 07. März 2012 ••• Wolf, Jürgen: C++ von A bis Z. Das um-
#4 francisbitonti.com, #3 & #7 n-e-r-v-o-u-s.com, #5 flickr.com:
html ••• http://biodiversitylibrary.org ••• www. biokurs.de/
com/2010/01/09/is-this-the-year-we-win-at-romanesco/ •••
fik/ ••• Brooks, Robert; Matelski, J. Peter: The dynamics of
KG, Berlin, 2007 ••• Neubert, Eberhard: Albrecht Dürer. Pflan-
fassende Handbuch. Galileo Press, Bonn, 2006
jonathanmccabe, #6 tomasz-starczewski.com, #8 anf.nu, #9
skripten/12/bs12-5.htm ••• http://biothing.org ••• http://
http:// sumo.de/definition-api.html ••• http://theverymany.
2-generator subgroups of PSL(2,C), in Riemann surfaces and re-
zen und Tiere. VEB E.A.Seeman Buch- und Kunstverlag, Leipzig
marcinignac.com, #10 & #11 justinlivi.net, #12 biothing.org •••
briancarper.net/tag/216/mandelbrot ••• http://creativecom-
com ••• http://tomasz-starczewski.com ••• http://velocirap-
lated topics: Proceedings of the 1978 Stony Brook Conference,
••• Okamoto, Naomi: Japanische Tuschemalerei für Einsteiger.
S.12-13: #1 & #6 Dobler: Schmuck//Juwellery S.104 & 108, #2
puting.cc/p5libs/proxml ••• http://de.flash-screen.com/free-
tor.mni.fh-giessen.de/Programmierung/progI-html-dir/node7.
Annals of Mathematics Studies, Band 97, Princeton University
Ein Malkurs in Beispielen. Augustus Verlag, München, 2001 •••
& #4 Klanten: Supersonic S.200 & 313, #3 & #7 Powers: natur
wallpaper/mask/beautiful-mask,1280x1024,32880.html
•••
html#SECTION00072000000000000000 ••• http:// weave.
Press, Princeton, N.J., 1981, S.65-71 ••• Burger, Wilhelm: Gra-
Powers, Alan: natur und design. Inspirationen für Architektur,
und design S.19 & 122, #5 & # 7 & #8 & #10 & #11 Sachs:
www.fei.com ••• www.flickr.com ••• http://francisbitonti.com
de ••• http://wikipedia.de ••• http://www.willemer.de/infor-
dientbasierte Rauschfunktionen und Perlin Noise (pdf). http://
Mode und angewandte Kunst. Verlag Paul Haupt, Bern, Stutt-
Nature Design S.32 & 62 f & 136 & 172 f ••• S.18-19: #1
••• http://lexikon.martinvogel.de/api.html ••• http:// justinlivi.
matik/java/javaclas.htm ••• http://www.zitate-aphorismen.de
staff.fh-hagenberg.at/burger/publications/index.html ••• Do-
gart, Wien, 2000, S. 1-122 ••• Prusinkiewicz, Przemyslaw: Self-
& #3 biodiversitylibrary.org, #2 Neubert: Albrecht Dürer Tafel
net ••• http://magazin.c-plusplus.de/artikel/Zuf%E4lle%20gib
bler, Georg: Schmuck//Jewellery. 1980-2010. ARNOLDSCHE
Similarity in Plants: Integrating Mathematical And Biological
24, #4 Okamoto: Japanische Tuschemalerei S.62, #5 flickr.com:
t%60sFragezeichenAusrufezeichen%20-%20Funktionen%20
Art Publishers, Stuttgart, 2010 ••• Fleischer, Kevin: Rekursion
Perspectives. In M. Novak (Hrsg.). Thinking in Patterns. Fractals
The_White_Deer, #6 Sachs: Nature Design S.19, #7 flickr.com:
rund%20um%20rand%2C%20Random%20und%20den%20
und Iteration (pdf). http://kfleischer.delphigl.com/tutorials.php
and Related Phenomena in Nature. World Scientific, Singapore,
little worries ••• S.22-23: #2 biokurs.de, #3 commons.wiki-
Zufall ••• http://marcinignac.com ••• http://www.mathe-
••• Heermann, Dieter W.: Ein Bespiel: Der Random Walk (pdf).
2004, S. 103-118 ••• Raskob, Christian: Schwerpunkt-Voronoi-
media.org: Scapania undulata Blattzellen, #7 briancarper.net,
online.at/materialien/matroid/files/fraktale/fraktale.html
http://wwwcp.tphys.uni-heidelberg.de/statmech ••• Jordan,
Diagramme (pdf). http://www.raskob.de/fun/d/#d ••• Sachs,
#8 roxiemike.wordpress.com, #9 tapeta.info, #10 wikipedia.
www.mikroskopie-forum.de
Thomas: Generierung virtueller Geländeformen durch Rausch-
Angeli: Nature Design. Von Inspiration zu Innovation. Züricher
de: Antennae Hubble, #11 apod.nasa.gov ••• S.34: de.flash-
com/talk1/index.html ••• http:// onformative.com ••• http://
funktionen und Filter (pdf). http://innerworld.sourceforge.net
Hochschule der Künste ZHdK, Züricher Fachhochschule und Lars
screen.com ••• S.38: weave.de & onformative.com ••• S.40:
www.ozok-online.de/dekoration-dekosteine-gartensteine-
••• Klanten, Robert; Hellige, Hendrik [Hrsg.]: Illusive. Contem-
Müller Publishers, 2007 ••• Vazirani, Umesh V.: Algorithms.
ozok-online.de ••• S.58: Daniel Steiner/ mikroskopie-forum.de
heilsteine/sandrosen/sandrosen-grösser-1kg/ ••• http://paul-
porary Illustration Part 3. Die Gestalten Verlag GmbH & Co. KG,
Chapter 2. Divide-and-conquer algorithms (pdf). http://www.
••• S.66: fei.com ••• alle Anderen: Diana Lange
anf.nu
•••
•••
•••
http://www.noisemachine.
75
Impressum
© 2012. Diana Lange. Alle Rechte vorbehalten.
www.diana-lange.de
Matrikelnummer: 532853
Text, Gestaltung und Umsetzung: Diana Lange
Entstanden im Modul »Integratives Projekt« an der HAWK FH HHG
im Studiengang Master of Arts
Geprüft von
Prof. Marion Lidolt
Prof. Stefan Wölwer
Sommersemester 2012
www.hawk-hhg.de

Documentos relacionados