Generative Grafiken 2 - Woche 3
Aufgaben
C1: Text einlesen
Wählt einen kleinen Text aus, und nutzt den folgenden Sketch, um diesen Text in Processing einzulesen. Erstellt danach eine einfache Darstellung der Zeilen.
C2: Text visualisieren
Verwendet euren Sketch von letzter Woche (Generative Grafik) und erweitert ihn so, dass die visuellen Variablen abhängig von eurem Text variiert werden.
Hausaufgabe: Projektrecherche
Findet ein Projekt oder ein Werk, das Text visualisiert, oder mit Text oder Typo spielerisch umgeht. Dies können Poster, statische Grafiken, interaktive Software, Animationen oder auch Installationen sein. Es sollte nur zu mindestens einem der beiden Bereiche passen:
- Analyse, Visualisierung, Textinterpretation, Generative Grafik, etc
- Typo, Animation, Cup-up techniques, Textgeneratoren, etc
Bis zur nächsten Woche muss jeder eine Zusammenfassung des Projekt per E-Mail an den Dozenten geschickt haben. Wir werden die Beiträge auf dem Creative Coding 2 Blog veröffentlichen. Achtet darauf, dass mindestens die folgenden Informationen dabei sind:
- Titel, Autor/Künstler, Quellenangabe (URL, Buch, ...)
- Kurzbeschreibung: Einen Absatz zum Projekt/Werk
- Tags: Drei bis fünf passende Stichwörter
- Zwei Screenshots: jpg oder png, 250px Weite
Tipp: Gute Startpunkte sind die Processing Exhibition, information aesthetics, oder visualcomplexity.com.
Projekt #1: Textvisuals
Wählt einen Text aus, und setzt ihn in als Sketch um.
For the first project each student (or group) must make a brief presentation to "sell" their idea for a finished project. The "sales presentation" has the following requirements:
- It should last exactly 5 minutes (not 3 or 7). Please practice at home to make sure your timing is right.
- 5-10 slides in PDF format. Feel free to use PowerPoint, OpenOffice or Keynote but make sure to export as a PDF.
- 1 or 2 hand drawn sketches. No Photoshop, Illustrator or fancy 3D renderings. Draw it on a napkin or a beer coaster and scan it or take a digital photo.
- The presentation must cover at least the following topics:
- General Concept
- Background (history, theory, inspirational story, etc.)
- Visual Concept (a basic design sketch)
- Rough technical plan or problem definition (but no code please, a sketch or diagram is enough)
- At the end of the presentation, each student (or group) should be prepared to respond to questions or critique for 5 minutes.
Zwischenpräsentation Klasse A: Do, 08.05., B: Mo, 05.05., C: Fr, 09.05.
Endpräsentation & Abgabe Klasse A: Do, 22.05., B: Mo, 19.05., C: Fr, 23.05.
Texte verwenden
Strings
Wie in CC1 : Text & Typographie gezeigt, sind Strings Zeichenketten, die Texte speichern können.
Diese Texte können direkt ausgegeben werden, sei es mit Hilfe von Fonts auf der Zeichenfläche oder mit Hilfe von println()
im Nachrichten-Bereich.
Darüberhinaus kann man die Texte auch auswerten, etwa wie häufig ein bestimmtes Wort in einem Satz vorkommt, oder wieviele Buchstaben in einem Text enthalten sind.
Die Methode txt.length()
gibt die Länge des Strings zurück, d.h. die Anzahl der enthaltenen Zeichen.
Diese kann – wie alle Variablen oder Werte – natürlich auch verwendet werden, um etwa die Weite eines Rechtecks festzulegen.
Im obigen Beispiel wäre das Rechteck folglich 10 Pixel weit (da "Hallo Welt" aus zehn Zeichen besteht).
- Processing Reference: String
- Processing Reference: String.length()
- Processing Examples: Characters and Strings
Zeichen im String
Da Strings eigentlich nur Ketten von Zeichen sind, also aneinandergehängte Buchstaben, Punktuationen, etc, kann auf diese auch einzeln zugegriffen werden.
Die Zeichen sind vom Datentyp char
. Die einzelnen Zeichen sind durchnummeriert, und fangen – wie in einem Array –
bei 0 an, und gehen bis length() - 1. Im String "Hallo Welt"
ist also das Zeichen 'W'
an der Position 6.
Mit charAt()
kann auf die einzelnen Zeichen zugegriffen werden. Das obige Beispiel gibt den Buchstaben W
im Nachrichtenbereich aus.
In Kombination mit length()
und einer Schleife kann dann auf alle Zeichen zugegriffen werden:
Suchen
Um in einem Text nach einem anderen Text zu suchen, kann indexOf()
verwendet werden. Damit kann die Position zum Beispiel eines Wort gefunden werden.
Dies ist eine recht einfache und eingeschränkte Vorgehensweise; es gibt darüber hinaus noch viele weitere, komplexere Möglichkeiten, die dafür aber auch deutlich leistungsstärker sind.
indexOf()
gibt die erste Position des gesuchten Texts zurück, wenn dieser denn gefunden wurde. Im obigen Beispiel also für "jagt" die Positon 6, da das Wort im
String sentence
nunmal an dieser Stelle vorkommt.
Um herauszufinden, ob ein Wort überhaupt in einem Text vorkommt, kann man prüfen, ob der indexOf größer als 0 ist:
Texte einlesen
In Processing kann man recht einfach Texte aus Dateien einlesen. Mit Hilfe von loadStrings()
wird eine Textdatei eingelesen und als String-Array zurück gegeben.
Die Datei sollte dabei – wie Bilder, oder Schriften auch – im data-Ordner des Sketches liegen.
Nun kann auf die einzelnen Zeilen mit einer Schleife zugegriffen werden:
- Processing Reference: loadStrings()
- Processing Example: Load File 1 Lädt und stellt Positionen aus einer Textdatei dar
Weitere Informationen zu Textmanipulationen und Strings
- Programming from A to Z: String Gutes kleines Tutorial über weitere Stringmanipulationen
- Processing Reference: split() Trennt einen String in mehrere Teile auf
- Processing Reference: match() Bessere, aber komplexere Suchfunktion
Formen 3
Neben den grundlegenden Formen wie Linien, Rechtecke und Ellipsen haben wir bereits andere Formen (wie Dreiecke und Bögen) kennengelernt. Nun betrachten wir kurz (und für einige wiederholend) weitere Formen.
Kurve
curve(x0, y0, x1, y1, x2, y2, x3, y3);
Zeichnet eine Kurve.
Beziér-Kurve
bezier(x0, y0, x1, y1, x2, y2, x3, y3);
Zeichnet eine Bezierkurve. Diese Kurven werden durch zwei Anker- und zwei Kontrollpunkte definiert. Die ersten beiden Parameter spezifizieren den ersten (P0) und die letzten beiden den zweiten Ankerpunkt (P3); diese beiden Ankerpunkte sind Start- und Endpunkte der Kurve. Die mittleren Kontrollpunkte (P1, P2) setzen die Kontrollpunkte, die die Form der Kurve festlegen.

Algorithmus einer Beziér-Kurve
Freiformen
Um beliebige Formen zu erstellen, kann man die Eckpunkte der Form festlegen und diese von Processing verbinden lassen. Solch ein Eckpunkt heißt in der Computergrafik Vertex.
Nun können mit Vertices natürlich einfache Formen erstellt werden, etwa ein Rechteck:

Rechteck

Polygon
Aber der Hauptzweck sind eben eher komplexere Freiformen:
Alle vertex()
-Punkte, die innerhalb beginShape()
und endShape()
stehen
werden zu einer Form, und als solche gezeichnet. Dabei gibt es verschiedene Zeichenmethoden,
die durch einen Parameter in beginShape()
ausgewählt werden.
texture()
Mit dieser Funktion können Bilder auf eine Freiform gelegt werden.