スクリーンショット_2019-10-12_10

数式に「いたずら」するのが楽しいジェネラティブアート

亀の歩み#4
亀の歩みと称して、ジェネラティブアートの練習を投稿しているのですが、今回は本来作りたかった図形の式を少しいじったことで意図せぬ美しい形が出てきた例です。

元々は初めの八角形の中点を新しい頂点としながら、小さい八角形がどんどん内側に追加される形を実装していました。
しかし、実際に描画してみたら面白くも美しくもありませんでした。
(というより、既視感のある図形で全くGenerativeな気がしませんでした。)

そこで、中点を計算する時に、「(頂点)+(頂点)/2」の代わりに1つだけ「(頂点)-(頂点)/2」と引き算を入れてみました。

するとどうでしょう。
全く意図していなかった、レコード盤のような作品ができました。

スクリーンショット 2019-10-12 10.11.13

特に右側の大きな崩れ方と、崩れた後の規則的にも見える螺旋が面白い!!

ソースコード

int repeatCount = 100;
int polygonSize = 8;
void setup() {
 size(800, 800);
 background(255);
 translate(width/2, height/2);
 
 float[] vertexXs = {0, -width*3/8, -width/2, -width*3/8, 0, width*3/8, width/2, width*3/8};
 float[] vertexYs = {-height/2, -height*3/8, 0, height*3/8, height/2, height*3/8, 0, -height*3/8};
 
 for (int i=0; i<repeatCount; i++) {
   noFill();
   strokeWeight(0.5);
   stroke(i*3);
   beginShape();
   for (int j=0; j<polygonSize; j++) {
     vertex(vertexXs[j], vertexYs[j]);
   }
   endShape(CLOSE);
   
   for(int j=0; j<polygonSize; j++) {
     if (j==7) {
       // Point
       vertexXs[7] = (vertexXs[7]-vertexXs[0])/2;
       vertexYs[7] = (vertexYs[7]-vertexYs[0])/2;
     } else {
       vertexXs[j] = (vertexXs[j]+vertexXs[j+1])/2;
       vertexYs[j] = (vertexYs[j]+vertexYs[j+1])/2;
     }
   }
 }
}

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