Processingはむつかしい
Processingをできるだけ毎日勉強しているのですが、なかなか成長しません。
2ヶ月くらい前に集中して本で理解したものを今日改めて作ってみようと思ったら、まったくできませんでした。
理解していたものも忘れてしまうというのはショックですが、諦めずにがんばろうと思います(泣)。
エージェントが作る成長構造
これは「Generative Design」という本にあるサンプルです。
タイトルは「エージェントが作る成長構造」というものです。
私はこういうのが大好きなのですが、「集合体恐怖症」的な人もいるらしいですね。気をつけて発信しないといけないですね。
コードはこちらです↓
int maxCount=5000;
float[] x=new float[maxCount];
float[] y=new float[maxCount];
float[] r=new float[maxCount];
float newX, newY, newR;
int currentCount=1;
void setup() {
size(1280, 670, P2D);
frameRate(5);
colorMode(HSB, 360, 100, 100, 100);
background(122, 35, 78, 100);
x[0]=width/2;
y[0]=height/2;
r[0]=10;
}
void draw() {
fill(198, 68, 96, 100);
stroke(180, 90, 100, 100);
ellipse(x[0], y[0], r[0]*2, r[0]*2);
// new
newX=random(width);
newY=random(height);
newR=random(3, 20);
// judge
float closestDist=100000000;
int closestIndex=0;
for (int i=0; i<currentCount; i++) {
float newDist=dist(newX, newY, x[i], y[i]);
if (newDist<closestDist) {
closestDist=newDist;
closestIndex=i;
}
}
// atan2
float angle=atan2(newY-y[closestIndex], newX-x[closestIndex]);
x[currentCount]=x[closestIndex]+cos(angle)*(newR+r[closestIndex]);
y[currentCount]=y[closestIndex]+sin(angle)*(newR+r[closestIndex]);
r[currentCount]=newR;
currentCount++;
for (int i=0; i<currentCount; i++) {
ellipse(x[i], y[i], r[i]*2, r[i]*2);
}
}
この記事が気に入ったらサポートをしてみませんか?