Illustratorでジェネラティブアートを作ってみる9

最終更新日

シェルペンスキーカーペット

前に正三角形のガスケットをやりました。シェルペンスキーのトライアングルってやつなんですけど、こちらにはバリエーションがありまして、同様のガスケットを正方形で作るやつがあります。今回は、これをやってみましょう。

作成ルール

  1. 最初に 1つの正方形を用意する。
  2. 各ステップで その正方形を 3×3のグリッドに分割 する。
  3. 中央の正方形を削除 する。
  4. 残りの8つの正方形に対して、同じ手順を 再帰的に適用 する。

この1〜4の手順を無限に繰り返すと、シェルピンスキーのカーペットが生成されます。

var lyr = app.activeDocument.layers.add();
lyr.name = "Sierpinski Carpet";

var maxDepth = 7;   
var baseSize = 300;

function getRandomColor()
{
  var color = new RGBColor();
  color.red = Math.random() * 255;
  color.green = Math.random() * 255;
  color.blue = Math.random() * 255;
  return color;
}

function drawCarpet(x, y, size, depth) 
{
  if (depth>maxDepth) return;
  if(depth==maxDepth)
  {
    var rect = lyr.pathItems.rectangle(y, x, size, size);
    rect.stroked = false;
    rect.filled = true;
    rect.fillColor = getRandomColor();
  }
  
  if (depth == maxDepth) return;
  
  var newSize = size / 3;
  for (var i=0; i<3; i++) 
  {
    for (var j=0; j<3; j++) 
    {
      if (i == 1 && j == 1) continue;
      drawCarpet(x + j * newSize, y - i * newSize, newSize, depth + 1);
    }
  }
}

drawCarpet(100, 500, baseSize, 1);

以下のイメージはmaxDepthを1〜7まで変えて実行したものを重ねた状態です。中央の窓から一つ前の矩形が見えている状態です。

再帰構造は他の同様のコードと変わりませんが、正方形を9分割する為に2重ループを利用しています。1段あたりの再帰呼び出しが8回なのでmaxDepthをn回とすると8^(n-1)個の正方形が生成されることになります。
上の例では最終段の7段目のみで正方形を描画させていますが全部で262,144個作成されます。この設定だと1辺が約0.14mmになります。8段目まで試しましたが、恐ろしく時間がかかるのとスクロールもままならないのでお勧めしません。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする