Codes zu »Form & Farbe«
Drei
// Anordnungen von Dreiecken
// Sebastian Wolf
// Bauhaus-Universität Weimar
// Digital Bauhaus Vorkurs
// Wintersemester 2010/11
// ControlP5 by Andreas Schlegel
import controlP5.*;
// CONTROL
ControlP5 controlP5;
float mode = 1;
int speed = 50;
int positionX = 10;
int positionY = 125;
int Width = 100;
int Height = 10;
// WINDOW
int bildbreite = 1000; // Fensterbreite in px
int bildhoehe = int(bildbreite * 0.5625); // 16/9 Format
// COLORS
int clr = 255; // Ausgangsfarbwert
int bgcolor = 50; // Farbe Hintergrund
int Saturation = 150; // Sättigung der Dreiecke
// FORM
int richtung = 2; // Drehung des Dreiecks
int radius = 50; // Radius des Dreiecks
void setup() {
size(bildbreite, bildhoehe);
colorMode(HSB, 255); // HSB Farbmodus - Farbton-Sättigung-Helligkeit
noStroke();
smooth();
background(bgcolor);
// CONTROL
controlP5 = new ControlP5(this);
// SLIDER (name, min, max, default, x, y, w, h)
controlP5.addSlider("Saturation", 1, 255, Saturation, positionX, positionY, Width, Height);
controlP5.addSlider("bgcolor", 1, 255, bgcolor, positionX, positionY + 15, Width, Height);
controlP5.addSlider("radius", 1, 100, radius, positionX, positionY + 30, Width, Height);
controlP5.addSlider("speed", 1, 100, speed, positionX, positionY + 45, Width, Height);
// BUTTONS (name, value, x, y, w, h)
controlP5.addButton("mode", mode, positionX, positionY + 60, Width/2, Height);
Button m = (Button)controlP5.controller("mode");
m.setCaptionLabel("mode I");
controlP5.addButton("Save", 0, positionX + Width/2, positionY + 60, Width/2, Height);
}
void draw() {
bg(); // zeichnet Hintergrund
form(); // zeichnet Dreicke
}
// DRAWING MODE
void mode() {
mode = (mode+1)%2;
Button m = (Button)controlP5.controller("mode");
if(mode == 1) {
m.setCaptionLabel("mode I");
}
else {
m.setCaptionLabel("mode II");
}
}
// PNG SAVING
void Save() {
saveFrame(timestamp()+"_##.png"); // png speichern
}
// BACKGROUND
void bg() {
if(mode == 1) { // bestimmt ob Dreiecke überschrieben werden oder
fill(bgcolor, 255);
}
else { // auf dem Bildschirm bleiben
fill(bgcolor, 0);
}
rect(0, 0, width, height);
}
// FORM
void form() {
delay(150 - speed);
richtung = int(random(4))+1; // zufällige Ausrichtung für Dreieck
clr = int(random(255)); // zufälliger Farbton für Dreick
fill(clr, Saturation, 255);
// int richtung, float posX, float posY, float radius
dreieck(richtung, int(random((width+2*radius)/(2*radius)))*2*radius+radius, int(random((height+2*radius)/(2*radius)))*2*radius+radius, radius);
}
// TRIANGLE
void dreieck(int richtung, float posX, float posY, float radius) {
switch(richtung) {
case 1:
triangle(posX-radius, posY-radius, posX+radius, posY-radius, posX-radius, posY+radius);
break;
case 2:
triangle(posX-radius, posY-radius, posX+radius, posY-radius, posX+radius, posY+radius);
break;
case 3:
triangle(posX+radius, posY+radius, posX+radius, posY-radius, posX-radius, posY+radius);
break;
case 4:
triangle(posX-radius, posY-radius, posX-radius, posY+radius, posX+radius, posY+radius);
break;
}
}
// TIMESTAMP (for png saving)
String timestamp() {
Calendar now = Calendar.getInstance();
return String.format("%1$tm:%1$td:%1$ty %1$tH%1$tM", now);
}
Farbharmonisches Chaos
// Farbharmonisches Chaos
// Sebastian Wolf
// Bauhaus-Universität Weimar
// Digital Bauhaus Vorkurs
// Wintersemester 2010/11
// .ase export by Generative Gestaltung
// ControlP5 by Andreas Schlegel
// colorLib by Jan Vantomme
import colorLib.*;
import generativedesign.*;
import controlP5.*;
// CONTROL
ControlP5 controlP5;
float mode = 1;
int positionX = 10;
int positionY = 125;
int Width = 100;
int Height = 10;
int clear = 2;
// WINDOW
int bildbreite = 1000; // Fensterbreite in px
int bildhoehe = int(bildbreite * 0.5625); // 16/9 Format
// COLORS
Palette farben; // Farbpalette
float base = random(255); // Ausgangsfarbwert (kann nur zu Beginn verändert werden)
color clr; // Farbe der Objekte
color bgclr = color(50); // Farbe Hintergrund
int alph = 50; // alpha-Wert der Objekte
// OBJECTS
ArrayList kreise; // Array aus Kreisen (Objekt Circle)
int countMax = 400; // max. Anzahl der Kreise
int count = 150; // Anzahl der Kreise
float radius = 4; // Radius der Kreise
float xPos; // x-Koordinate Kreis
float yPos; // y-Koordinate Kreis
void setup() {
size(bildbreite, bildhoehe);
colorMode(HSB, 255);
noStroke();
smooth();
farben = new Palette(this);
kreise = new ArrayList();
kreise.add(new Circle(xPos, yPos, radius, clr));
// CONTROL
controlP5 = new ControlP5(this);
// SLIDER (name, min, max, default, x, y, w, h)
controlP5.addSlider("base", 0, 255, base, positionX, positionY, Width, Height);
controlP5.addSlider("radius", 1, 60, radius, positionX, positionY + 15, Width, Height);
controlP5.addSlider("count", 1, countMax, count, positionX, positionY + 30, Width, Height);
// BUTTONS (name, value, x, y, w, h)
controlP5.addButton("Start", 0, positionX, positionY + 45, Width/2, Height);
controlP5.addButton("clear", clear, positionX + Width/2, positionY + 45, Width/2, Height);
controlP5.addButton("SavePNG", 0, positionX, positionY + 60, Width/2, Height);
Button png = (Button)controlP5.controller("SavePNG");
png.setCaptionLabel("Save .png");
controlP5.addButton("SaveASE", 0, positionX + Width/2, positionY + 60, Width/2, Height);
Button ase = (Button)controlP5.controller("SaveASE");
ase.setCaptionLabel("Save .ase");
controlP5.addButton("mode", mode, positionX, positionY + 75, Width/2, Height);
Button m = (Button)controlP5.controller("mode");
m.setCaptionLabel("RANDOM");
background(bgclr);
create();
}
void draw() {
if(clear == 1) {
for (int i = count - 1; i >= 0; i--) {
Circle kreis = (Circle) kreise.get(i);
kreis.move();
kreis.render(radius);
}
}
else {
background(bgclr);
fill(color(base, 255, 255));
ellipse(30, 100, radius*2, radius*2);
}
}
// DRAWING MODE
void mode() {
mode = (mode+1)%2;
Button m = (Button)controlP5.controller("mode");
if(mode == 1) {
m.setCaptionLabel("RANDOM");
}
else {
m.setCaptionLabel("CENTER");
}
}
void Start() {
clear = 1;
background(bgclr);
create();
}
void clear() {
clear = 2;
background(bgclr);
}
// PNG SAVING
void SavePNG() { // png speichern
saveFrame(timestamp()+"_##.png");
}
// ASE SAVING
void SaveASE() { // ase speichern (Adobe Farbpalette)
color[] colors = new color[farben.totalSwatches()];
for (int i = 0; i < farben.totalSwatches(); i++) {
colors[i] = farben.getColor(i);
}
GenerativeDesign.saveASE(this, colors, timestamp()+".ase");
}
public void create() {
kreise.clear();
farben.makeTriad(color(base, random(200, 255), 255, alph)); // Harmonie
for (int i = 0; i < countMax; i++) {
if(mode == 1) {
xPos = random(width);
yPos = random(height);
}
else {
xPos = width/2;
yPos = height/2;
}
clr = farben.getColor(int(random(0, farben.totalSwatches())));
kreise.add(new Circle(xPos, yPos, radius, clr));
}
}
String timestamp() {
Calendar now = Calendar.getInstance();
return String.format("%1$tm:%1$td:%1$ty %1$tH%1$tM", now);
}
/////
// Circle-Klasse
class Circle {
float xPos;
float yPos;
float radius;
float wanderTheta = random(TWO_PI);
color clr;
Circle (float axPos, float ayPos, float aradius, color aclr) {
xPos = axPos;
yPos = ayPos;
radius = aradius;
clr = aclr;
}
void render(float radius) {
fill(clr);
ellipse(xPos, yPos, radius*2, radius*2); // runde objekte
/* rect(xPos, yPos, radius*2, radius*2); // 4eckige objekte
triangle(xPos, yPos + radius, xPos - radius, yPos - radius, xPos + radius, yPos + radius); // 3eckige objekte
beginShape();
for(int i = 0; i < random(random(50, 200)); i++) {
vertex(random(xPos - radius, xPos + radius), random(yPos - radius, yPos + radius));
}
endShape();*/
}
void move() {
float wanderOffset = random(-0.3, 0.3);
wanderTheta += wanderOffset;
xPos += cos(wanderTheta);
yPos += sin(wanderTheta);
}
}