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!!
応援してくださる方!いつでもサポート受け付けてます!