Objektorientiertes Animieren #03 (wandern-farbig) in Processing

Hinzugefügt am von Steffen Fiedler

Powered by Processing.js

Sketch drei färbt die Gizmos in vollem Spektrum ein. Der HSB-Farbraum eignet sich für dieses Anliegen besonders (colorMode (HSB, 255);), da wir nur den Farbton Ändern und Sättigung und Helligkeit konstant beleiben. Klasse 'Gizmo' wird für die Farbtonberechnung um die Methode getHue() erweitert. In ihr berechnet sich die Farbe aus der Lage des Vektors direction. Demnach erhält jede Richtung ihren eigenen Farbton.

Der Sketch

Gizmo giz[] = new Gizmo[100];

void setup () {
  size (550, 200);
  colorMode (HSB, 255);
  background (76);
  
  for (int i=0; i < giz.length; i++) {
    float x = random (width);
    float y = random (height);
    giz[i] = new Gizmo (x, y);
  }
}

void draw () {
  noStroke ();
  fill (76, 15);
  rect (0, 0, width, height);
  
  for (int i=0; i < giz.length; i++) {
    giz[i].move ();
    stroke (giz[i].getHue (), 255, 255);
    point (giz[i].position.x, giz[i].position.y);
  }
}
class Gizmo {
  
  PVector position;
  PVector direction;
  
  float spin = 0.15;
  
  Gizmo (float theX, float theY) {
    position    = new PVector (theX, theY);
    direction   = new PVector ();
    direction.x = random (-1, 1);
    direction.y = random (-1, 1);
  }
  
  void move () {
    direction.x += random (-spin, spin);
    direction.y += random (-spin, spin);
    direction.normalize ();
    position.add (direction);
    
    if (position.x < 0 || position.x > width) {
      direction.x *= -1;
    }
    if (position.y < 0 || position.y > height) {
      direction.y *= -1;
    }
  }
  
  int getHue () {
    PVector v = new PVector (0, 1);
    float a = PVector.angleBetween (v, direction);
    a /=  TWO_PI;
    return int (255 * a);
  }
}