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