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

シェルペンスキーカーペット
前に正三角形のガスケットをやりました。シェルペンスキーのトライアングルってやつなんですけど、こちらにはバリエーションがありまして、同様のガスケットを正方形で作るやつがあります。今回は、これをやってみましょう。
作成ルール
- 最初に 1つの正方形を用意する。
- 各ステップで その正方形を 3×3のグリッドに分割 する。
- 中央の正方形を削除 する。
- 残りの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段目まで試しましたが、恐ろしく時間がかかるのとスクロールもままならないのでお勧めしません。