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);
-
}
-
}








