Creative Coding

btk

Till Nagel

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).

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:

Weitere Informationen zu Textmanipulationen und Strings

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.

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

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