WEAVE beta – Processing: Farbpaletten

Für Karsten Schmidt ist Code das Designtool seiner Wahl. Unter http://toxiclibs.googlecode.com veröffentlich er regelmäßig Code-Bausteine. Hier der Code für das Processing-Demo ColorTheme:


import toxi.color.*;
import toxi.geom.*;
import toxi.math.*;
import toxi.util.datatypes.*;

import processing.pdf.*;

// parameter fuer die Darstellung der Ellipsen & Kurve
float   XRAD = 300;
float   YRAD = 500;
int     RES = 6;
int     NUM_POINTS=6;

void setup() {
size(1024, 768);
smooth();
noLoop();
}

void draw() {
// Ersteinmal ein neues Farbthema definieren...
ColorTheme t = new ColorTheme("test");
// und verschiedene Farben (mit Bias/Gewicht) hinzufuegen
// die Liste der bekannten Farben ist hier:
// http://dev.postspectacular.com/docs/colorutils/toxi/color/NamedColor.html
t.addRange("fresh ivory", 0.5);
t.addRange("intense goldenrod", 0.25);
t.addRange("intense red", 0.15);
t.addRange("fresh teal", 0.05);
t.addRange("bright yellow", 0.05);

// und jetzt moechten wir noch eine andere zufaellige Farbe, die jedoch garantiert
// ziemlich gesaettigt und hell ist (diese beiden Komponenten sind in dem preset
// ColorRange.BRIGHT definiert, was jedoch immer noch voellige Freiheit fuer die
// eigentliche Grundfarbe zulaesst)
// das "Gewicht" dieser Farbe in der Palette soll zwischen 2-5% liegen...
t.addRange(ColorRange.BRIGHT, TColor.newRandom(), random(0.02, 0.05));

// nun nutzen wir TColortheme um eine Liste mit 160 Farben zu erzeugen
ColorList list = t.getColors(160);

// hier nutzen wir die Systemzeit, um eine unique file ID fuer die PDF Datei zu erstellen
long timeStamp=System.currentTimeMillis()/1000;
// PDF Export starten
beginRecord(PDF, "colors-"+timeStamp+".pdf");
// wir nehmen die hellste Farbe in der Palette als Hintergrund
background(list.getLightest().toARGB());
// wir wollen keine Outlines
noStroke();
// Kurve berechnen & zeichnen
drawSpline(list);
// PDF abschliessen & speichern
endRecord();
}

// wir wollen nur eine neue Kurve auf Tastendruck erzeugen
void keyPressed() {
redraw();
}

void drawSpline(ColorList list) {
int numCols = list.size();
// fuer die Kurve benoetigen wir erst einmal verschiedene Kontrollpunkte
Vec2D[] points=new Vec2D[NUM_POINTS];
// dann definieren wir einen zufaelligen Anfangspunkt auf der linken Seite
points[0]=new Vec2D(-XRAD,random(0.2,0.9)*height);
// und plazieren andere zufaellige Punkte in der Mitte
for(int i=1; i<points.length-1; i++) {
points[i]=new Vec2D(random(-1,1)*50+(float)i/points.length*width,random(0.25,0.75)*height);
}
// sowie einen weiteren Endpunkt ganz rechts
points[points.length-1]=new Vec2D(width+XRAD,random(height));
// jetzt packen wir diese Punkte in einen Spline container
// und berechnen die resultierende Kurve
ArrayList vertices=new Spline2D(points).computeVertices(width/RES);
// fast fertig, fuer jeden Punkt entlang der Kurve zeichnen wir eine Ellipse mit
// einer Farbe aus der gegebenen Farbpalette
for(Iterator i=vertices.iterator(); i.hasNext(); ) {
Vec2D v=(Vec2D)i.next();
fill(list.get(MathUtils.random(numCols)).toARGB());
ellipse(v.x,v.y,noise(v.y*0.01)*XRAD,noise(v.x*0.01)*YRAD);
}
}
TwitterFacebookMister-WongDeliciousGoogle BookmarksIdenti.caShare