ProcessingでGenerative art #83
今回は三角形を4つに分けました。
シェルビンスキーのギャスケットとも少し違う。
Code
int actRandomSeed = 0;
int count = 3;
void setup() {
size(800, 800, P2D);
pixelDensity(2);
colorMode(HSB, 360, 100, 100, 100);
}
void draw() {
randomSeed(actRandomSeed);
background(0);
divideTriangle(0, 0, width, 0, mouseX, mouseY, count);
divideTriangle(width, 0, width, height, mouseX, mouseY, count);
divideTriangle(width, height, 0, height, mouseX, mouseY, count);
divideTriangle(0, height, 0, 0, mouseX, mouseY, count);
}
void divideTriangle(float x1, float y1, float x2, float y2, float x3, float y3, float n) {
stroke(360);
fill(randomColor());
beginShape();
vertex(x1, y1);
vertex(x2, y2);
fill(randomColor());
vertex(x3, y3);
endShape(CLOSE);
n -- ;
if (n > 0) {
float random1 = map(randomGaussian(), -5, 5, 0, 1);
float randomX1 = x3 + (x1- x3) * random1;
float randomY1 = y1 + (y3 - y1) * (1 - random1);
float random2 = map(randomGaussian(), -5, 5, 0, 1);
float randomX2 = x1 + (x2- x1) * random2;
float randomY2 = y1 + (y2 - y1) * random2;
float random3 = map(randomGaussian(), -5, 5, 0, 1);
float randomX3 = x3 + (x2- x3) * random3;
float randomY3 = y3 + (y2 - y3) * random3;
float probability = map(n, 1, count, 0.9, 0);
if (random(1) > probability) {
divideTriangle(x1, y1, randomX2, randomY2, randomX1, randomY1, n);
}
if (random(1) > probability) {
divideTriangle(randomX1, randomY1, randomX2, randomY2, randomX3, randomY3, n);
}
if (random(1) > probability) {
divideTriangle(randomX2, randomY2, x2, y2, randomX3, randomY3, n);
}
if (random(1) > probability) {
divideTriangle(randomX1, randomY1, randomX3, randomY3, x3, y3, n);
}
}
}
color randomColor() {
float r = random(1);
float alph = 100;
if (r > 6.0/7.0) return color(0, 100, 100, alph);
else if (r > 5.0/7.0) return color(52, 100, 100, alph);
else if (r > 4.0/7.0) return color(144, 100, 100, alph);
else if (r > 3.0/7.0) return color(216, 100, 100, alph);
else if (r > 2.0/7.0) return color(288, 100, 100, alph);
else if (r > 1.0/7.0) return color(360, alph);
else return color(0, alph);
}
void mousePressed() {
actRandomSeed = (int) random(10000);
}
void keyPressed() {
if (key == 's')saveFrame("####.png");
if (keyCode == UP)count += 1;
if (keyCode == DOWN)count -= 1;
}
Happy coding!!
応援してくださる方!いつでもサポート受け付けてます!