見出し画像

ProcessingでGenerative art #74

Code

int count = 4;
int actRandomSeed = 0;
int drawMode = 1;

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

void draw() {
  randomSeed(actRandomSeed);
  background(0);
  divideRect(10, 10, width-10, 10, width - 10, height - 10, 10, height - 10, count);
}

void divideRect(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, int n) {
  if (n == 1) {

    changeDrawMode();

    beginShape();
    vertex(x1, y1);
    vertex(x2, y2);
    vertex(x3, y3);
    vertex(x4, y4);
    endShape(CLOSE);

    changeDrawMode();

    if (random(1)>0.8)drawTriangle(x1, y1, x2, y2, x3, y3);
    else if (random(1)>0.6)drawTriangle(x2, y2, x1, y1, x4, y4);
    else if (random(1)>0.4)drawTriangle(x3, y3, x2, y2, x1, y1);
    else if (random(1)>0.2)drawTriangle(x4, y4, x1, y1, x2, y2);

    if (drawMode == 3) {
      int d = (int)random(100);
      strokeWeight(0.2);
      ellipse(x1, y1, d, d);
      ellipse(x2, y2, d, d);
      ellipse(x3, y3, d, d);
      ellipse(x4, y4, d, d);
    }
  }

  n--;

  if (n > 0) {
    float randomPointX = map(randomGaussian(), -5, 5, (x1+x4)/2, (x2+x3)/2);
    float randomPointY = map(randomGaussian(), -5, 5, (y1+y2)/2, (y3+y4)/2);

    divideRect(x1, y1, (x2+x1)/2, ( y1+y2)/2, randomPointX, randomPointY, (x1+x4)/2, (y4+y1)/2, n);
    divideRect((x2+x1)/2, ( y1+y2)/2, x2, y2, (x2+x3)/2, (y2+y3)/2, randomPointX, randomPointY, n);
    divideRect(randomPointX, randomPointY, (x2+x3)/2, (y2+y3)/2, x3, y3, (x3+x4)/2, (y3+y4)/2, n);
    divideRect((x1+x4)/2, (y1+y4)/2, randomPointX, randomPointY, (x3+x4)/2, (y3+y4)/2, x4, y4, n);
  }
}

void changeDrawMode() {
  if (drawMode == 1) {
    strokeWeight(1);
    stroke(360);
    if (random(1) > 0.75) {
      fill(0, 100, 100, 90);
    } else if (random(1) >0.50) {
      fill(162, 100, 100, 90);
    } else if (random(1) >0.25) {
      fill(237, 100, 100, 90);
    } else {
      fill(307, 100, 100, 90);
    }
  }

  if (drawMode == 2) {
    noStroke();
    fill(random(360));
  }

  if (drawMode == 3) {
    strokeWeight(1);
    stroke(random(360), random(100), random(50, 100));
    fill(random(230, 340), 100, 100, 30);
  }
}

void drawTriangle(float x1_, float y1_, float x2_, float y2_, float x3_, float y3_) {
  for (int i = 0; i < 100; i ++) {
    strokeWeight(0.01);
    float shiftX = map(i, 0, 99, x3_, x2_);
    float shiftY = map(i, 0, 99, y3_, y2_);
    triangle(x1_, y1_, x2_, y2_, shiftX, shiftY);
    noFill();
  }
}

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

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

  if (key == '1')drawMode = 1;
  if (key == '2')drawMode = 2;
  if (key == '3')drawMode = 3;

  if (keyCode == UP)count += 1;
  if (keyCode == DOWN)count -= 1;
}

Happy coding!!

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