見出し画像

ProcessingでGenerative art #70

少し画像加工しました。

Code

ArrayList <PVector> circles;
int actRandomSeed = 0;

float minRadius = 26;
float maxRadius = 300;

void setup() {
  size(800, 800);
  pixelDensity(2);
  colorMode(HSB, 360, 100, 100);
}

void draw() {
  circles = new ArrayList <PVector>();

  randomSeed(actRandomSeed);
  background(211, 10, 100);

  addCircle();
  for (int i=0; i<circles.size(); i++) {
    PVector p = circles.get(i);
    drawCircle(p.x, p.y, p.z * 2);
  }
}

void addCircle() {
  while (circles.size() < 40) {
    float radius = random(minRadius, maxRadius);
    PVector c = new PVector(random(width), random(height), radius);
    boolean overlapping = false;

    for (PVector p : circles) {
      if (dist(c.x, c.y, p.x, p.y) < (c.z + p.z)) {
        overlapping = true;
        break;
      }
    }
    if (!overlapping) {
      circles.add(c);
    }
  }
}

void drawCircle(float posX_, float posY_, float diameter) {
  float start = 0;
  float end = radians(random(50));

  strokeWeight(map(diameter/2, minRadius, maxRadius, 0.4, 1));
  for (int i = 0; i < 30; i++) {
    stroke(0);
    randomFillColor();
    arc(posX_, posY_, diameter, diameter, start, end, PIE);

    start = end;
    end = start + radians(random(5, 50));
    if (start > TWO_PI)break;
  }

  for (int i = 0; i < 100; i ++) {
    for (float theta  = radians(random(3)); theta < TWO_PI + radians(random(2)); theta += radians(random(map(i, 0, 99, 1, 20)))) {
      float radius = map(i, 0, 99, diameter * 0.5, diameter * 0.2);
      float x = posX_ + radius * cos(theta);
      float y = posY_ + radius * sin(theta);
      float alph = map(i, 0, 99, 100, 0);

      strokeWeight(map(diameter/2, minRadius, maxRadius, 0.5, 2));
      stroke(0, alph);
      point(x, y);
    }
  }
}

void randomFillColor() {
  float r = random(1);

  if (r > 0.83) fill(0, 100, 100);
  else if (r > 0.66) fill(72, 100, 100);
  else if (r > 0.50) fill(144, 100, 100);
  else if (r > 0.34) fill(216, 100, 100);
  else if (r > 0.18) fill(288, 100, 100);
  else noFill();
}

void mousePressed() {
  actRandomSeed = (int)random(10000);
}

void keyPressed() {
  if (key == 's')saveFrame("####.png");
}

応援してくださる方!いつでもサポート受け付けてます!