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