見出し画像

Processingはむつかしい

Processingをできるだけ毎日勉強しているのですが、なかなか成長しません。

2ヶ月くらい前に集中して本で理解したものを今日改めて作ってみようと思ったら、まったくできませんでした。

理解していたものも忘れてしまうというのはショックですが、諦めずにがんばろうと思います(泣)。

エージェントが作る成長構造

これは「Generative Design」という本にあるサンプルです。
タイトルは「エージェントが作る成長構造」というものです。

画像1

私はこういうのが大好きなのですが、「集合体恐怖症」的な人もいるらしいですね。気をつけて発信しないといけないですね。

コードはこちらです↓

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);
 }
}

この記事が気に入ったらサポートをしてみませんか?