見出し画像

Generative Art #169

Code

ArrayList<Form>form = new ArrayList<Form>();

void setup() {
 size(800, 800, OPENGL);
 pixelDensity(2);
 rectMode(CENTER);
 newForm();
}

void draw() {
 background(255);
 camera(width*0.5, height*1.1, width*0.6, width*0.5, height*0.7, 0, 0, 1, 0);

 for (int i=0; i<form.size(); i++) {
   Form f = form.get(i);
   f.run();
 }


 //saveFrame("output/####.png");
 //if(frameCount > (50*60)){
 //  exit();
 //}
}

void newForm() {
 form = new ArrayList<Form>();
 int c = 8;
 float w = width/c;

 noFill();
 stroke(0);

 for (int j=0; j<c; j++) {
   for (int i=0; i<c; i++) {
     form.add(new Form(i*w+w/2, j*w+w/2, w));
   }
 }
}

void mousePressed() {
 newForm();
}

int[] colors = {#eac435, #345995, #03cea4, #fb4d3d, #ca1551};
int getCol() {
 return colors[(int)random(colors.length)];
}

class Form {
 float x, y, s;
 float ss, sss;
 float hs;
 float z=0;
 float angle=0;
 int t, t1, t2, t3, t4, t5, t6, t7;
 float step;
 color col;
 float p;
 float rectS;
 Form(float x, float y, float s) {
   this.x = x;
   this.y = y;
   this.s = s;

   hs = s/2;
   step = 1;
   t = -(int)random(2500);
   t1 = 0+50;
   t2 = t1+50;
   t3 = t2+10;
   t4 = t3+80;
   t5 = t4+80;
   t6 = t5+60;
   t7 = t6+50;
   col = getCol();
   p = random(1);
 }

 void show() {
   noFill();
   stroke(col);
   push();
   translate(x, y);
   rotate(angle);
   if (p < 0.1)circle(0, 0, ss);
   else square(0, 0, ss);

   noStroke();
   fill(col);
   translate(0, 0, z);
   if (p < 0.1)sphere(sss);
   else box(sss*2);

   fill(col);
   noStroke();
   if (p < 0.1) circle(0, 0, rectS);
   else square(0, 0, rectS);
   pop();
 }

 void move() {
   if (t > 0) {
     if (t < t1) {
       float mp = map(t, 0, t1-1, 0, 1);
       ss = lerp(0, s, sqrt(mp));
     } else if (t < t2) {
       float mp = map(t, t1, t2-1, 0, 1);
       z = lerp(s*4, -s*0.2, sq(sq(mp)));
       sss = lerp(0, s*0.25, sqrt(mp));
     } else if (t < t3) {
       float mp = map(t, t2, t3-1, 0, 1);
       z = lerp(-s*0.2, 0, sqrt(mp));
     } else if (t < t4) {
       float mp = map(t, t3, t4-1, 0, 1);
       angle = lerp(0, TAU, sq(mp));
       sss = lerp(s*0.25, s*0.5, sq(mp));
     } else if (t < t5) {
       float mp = map(t, t4, t5-1, 0, 1);
       angle = lerp(TAU, TAU*2, mp-sq(mp));
       ss = 0;
     } else if (t < t6) {
       float mp = map(t, t5, t6-1, 0, 1);
       angle = lerp(PI, 0, mp);
       sss = lerp(s*0.5, 0, mp);
       z = lerp(0, -s/2, mp);
     } else if (t < t7) {
       float mp = map(t, t6, t7-1, 0, 1);
       rectS = lerp(0, s-1, sq(mp));
       angle = lerp(PI, 0, sq(mp));
     }
   }
   t += step;
 }

 void run() {
   show();
   move();
 }
}

二乗使ったり√使ったりいろんな動きを実験的に使ってみる。

Happy coding!!


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