Illustratorでジェネラティブアートを作ってみる7
ピタゴラスツリー
ピタゴラスツリーは、数学的に生成されるフラクタル図形の一種で、直角二等辺三角形と正方形の繰り返しによって成り立っています。その名の通り「ピタゴラスの定理」に由来する構造を持っており、樹形や植物にも似た美しい形が特徴です。
ということで、コードを見てみましょう。
var doc = app.activeDocument;
var layer = doc.layers.add();
layer.name = "Pythagoras Tree";
var baseSize = 50;
var maxDepth = 12;
function getGrayColor(level)
{
var gray = new GrayColor();
gray.gray = Math.max(10, 100 - level * 10);
return gray;
}
function drawPythagorasTree(x, y, size, angle, depth)
{
if (depth > maxDepth) return;
var rad = angle * Math.PI / 180;
var cosA = Math.cos(rad);
var sinA = Math.sin(rad);
var p1 = [x, y];
var p2 = [x + size * cosA, y + size * sinA];
var p3 = [p2[0] - size * sinA, p2[1] + size * cosA];
var p4 = [p1[0] - size * sinA, p1[1] + size * cosA];
var square = layer.pathItems.add();
square.setEntirePath([p1, p2, p3, p4]);
square.stroked = false;
square.filled = true;
square.fillColor = getGrayColor(depth);
square.closed = true;
var newSize = size * Math.sqrt(2) / 2;
//left branch
var leftX = p4[0];
var leftY = p4[1];
var leftAngle = angle + 45;
drawPythagorasTree(leftX, leftY, newSize, leftAngle, depth + 1);
//right branch
var rightX = p3[0] - newSize * Math.cos((angle - 45) * Math.PI / 180);
var rightY = p3[1] - newSize * Math.sin((angle - 45) * Math.PI / 180);
var rightAngle = angle - 45;
drawPythagorasTree(rightX, rightY, newSize, rightAngle, depth + 1);
}
drawPythagorasTree(300, 100, baseSize, 0, 1);
かなりシンプルなんですけど、他のフラクタル系の処理と同様に再帰処理により描画が進められます。Illustratorの座標系の特徴であるY軸の反転に対する調整がややこしいのですが、1回のループで正方形ひとつを描画する構成ですから、処理の流れとしては複雑さはないと思います。段数が深い部分では内部に食い込んでいく為、末端に行くほど着色を薄くしています。