水曜日, 11月 13, 2024

JavaScriptでAI遊び 28 
ランダムサイズ、色の円を重ねずにランダム配置(RGB版)

ランダムサイズ、色の円を重ねずにランダム配置させるRGB版です。

 function createRandomCircles(numCircles) {
var doc = app.activeDocument;
var artboard = doc.artboards[0];
var artboardRect = artboard.artboardRect;
var circles = [];

for (var i = 0; i < numCircles; i++) {
var radius = Math.random() * 50 + 10;
// ランダムなサイズ(10〜60の範囲)
var x, y, overlapping;

do {
overlapping = false;
x = Math.random() * (artboardRect[2] -
artboardRect[0] - 2 * radius) +
                artboardRect[0] + radius;
y = Math.random() * (artboardRect[1] -
artboardRect[3] - 2 * radius) +
                artboardRect[3] + radius;

for (var j = 0; j < circles.length; j++) {
var dx = circles[j].x - x;
var dy = circles[j].y - y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < circles[j].radius + radius) {
overlapping = true;
break;
}
}
} while (overlapping);

var circle = doc.pathItems.
ellipse(y + radius, x - radius, 2 * radius, 2 * radius);
circle.filled = true;
circle.fillColor = new RGBColor();
circle.fillColor.red = Math.random() * 255;
circle.fillColor.green = Math.random() * 255;
circle.fillColor.blue = Math.random() * 255;
circle.stroked = false; // 線なし

circles.push({ x: x, y: y, radius: radius });
}
}

var numCircles =
prompt("作成する円の数を入力してください:", "20");
if (numCircles !== null) {
createRandomCircles(parseInt(numCircles, 10));
}

実行したら円の数を入力します。デフォルトは20。ただし40以上になるとIllustratorが落ちるかも・・・

結果A

結果B