【Processing】copy()を工夫して切り紙あそびを再現してみる

f:id:osushi_94:20200920010944j:plain
切り紙
f:id:osushi_94:20200920011009j:plain
Processingによる再現

生きてます。
造形遊びでおなじみの切り紙あそび。
紙を折って切って広げて楽しむのってジェネレーティブだよな〜と常々思っていました。
というわけで折り紙とハサミでパッとつくったものを再現してみました。

arcとlineをcopy()で複製(偶奇判定で反転)しているのがミソです。
なぜかOpenProcessingではこのようにならなかったので直張り。
数値変えたらけっこうおもしろかったのでまた今度やります。
こっちもやってくぞ。

このブログ放置気味だったけど、今でも地味にアクセスがあるのでできる範囲で続けます〜。

size(500, 500); 
background(255); //画面サイズ、背景を白
noFill(); 
strokeWeight(5);       //塗りつぶしなし、線幅5px
int a = 500 / 4;     //画面を4分割した数値 = この場合は125 
arc(0, 0, 120, 120, radians(0), radians(90));  //円弧を描画
line(a-60, a, a, a-60);                        //直線を描画
int countx = 1; 
int county = 1; //偶数奇数の判定のための変数
int cdx = a; 
int cdy = a;  //反転するための変数
for (int i = 0; i < width; i += a) {     //for文を2重で用いて16回
  for (int j = 0; j < height; j += a) {  //iはx方向、jはy方向
    int sx = i; 
    int sy = j; //コピーのための変数に代入
  
    if (countx%2 == 0) { 
      cdx *=-1; 
      sx +=  a;
    } 
    if (county%2 == 0) { 
      cdy *= -1; 
      sy += a;
    } 
    copy(0, 0, a, a, sx, sy, cdx, cdy); //描画をコピー
    cdx = abs(cdx); 
    cdy = abs(cdy); //数値をリセット
    county++; //y方向の繰り返しをカウント
  }countx++; //x方向の繰り返しをカウント
}