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

規則性を持たせて多数描画する

亀の歩み#5
亀の歩みと称して、ジェネラティブアートの練習を投稿しているのですが、今回は前回の#4のアルゴリズムを利用しつつ、それを回転しながら連続描画することで綺麗な円模様ができました。

まず基本としたのは以下の図でした。#4のアルゴリズムをcurveVertexに変更して、引き算する箇所を2つに増やしたものです。

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

うーん、これはこれで、機械が書いたものには見えなくて面白いのですが、ピカソが描いたと言っても、幼稚園生の落書きと言っても信じられるシンプルなものです。

そこで、これをrotateで回転させながら、その都度描画させていくと以下のような円模様ができました。

タンポポの綿毛のようにも、目の模様のようにも見えて綺麗!
一見、落書きのように見える図でも、規則に則って多数描画すると、まるで初めからその図が設計されていたかのように変化するのが面白い!

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

ソースコード

int repeatCount = 20;
int polygonSize = 8;
int tryCount = 20;
void setup() {
 size(800, 800);
 background(255);
 translate(width/2, height/2);
 smooth();
 
 for (int t=0; t<tryCount; t++) {     
   float[] vertexXs = {0, -720*3/8, -720/2, -720*3/8, 0, 720*3/8, 720/2, 720*3/8};
   float[] vertexYs = {-720/2, -720*3/8, 0, 720*3/8, 720/2, 720*3/8, 0, -720*3/8};
 
   rotate(PI/tryCount);
   for (int i=0; i<repeatCount; i++) {
     noFill();
     strokeWeight(0.5);
     stroke(i*3, 80);
     beginShape();
     for (int j=0; j<polygonSize; j++) {
       curveVertex(vertexXs[j], vertexYs[j]);
     }
     curveVertex(vertexXs[0], vertexYs[0]);
     curveVertex(vertexXs[1], vertexYs[1]);
     endShape(CLOSE);
   
     for(int j=0; j<polygonSize; j++) {
       if (j==7) {
         vertexXs[7] = (vertexXs[7]-vertexXs[0])/2;
         vertexYs[7] = (vertexYs[7]-vertexYs[0])/2;
       } else if (j == 3) {
         vertexXs[3] = (vertexXs[3]-vertexXs[4])/2;
         vertexYs[3] = (vertexYs[3]-vertexYs[4])/2;
       } else {
         vertexXs[j] = (vertexXs[j]+vertexXs[j+1])/2;
         vertexYs[j] = (vertexYs[j]+vertexYs[j+1])/2;
       }
     }
   }
 }
}

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