木曜日, 4月 03, 2025

JavaScriptでAI遊び 40 
指定半径の三角形からN角形を描画

指定半径の三角形からN角形を自動描画します。


// 多角形描画
function drawRegularPolygon(sides, radius, centerX, centerY) {
var doc = app.activeDocument;
var angle = 360 / sides;
var points = [];
for (var i = 0; i < sides; i++) {
var theta = (angle * i - 90) * (Math.PI / 180);
var x = centerX + radius * Math.cos(theta);
var y = centerY + radius * Math.sin(theta);
points.push([x, y]);
}
var polygon = doc.pathItems.add();
polygon.setEntirePath(points.concat([points[0]]));
polygon.closed = true;
polygon.stroked = true;
polygon.filled = false;
}


function main() {
if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
return;
}
// 半径を指定
var radius =
        parseFloat(prompt("半径を入力してください: ", "100"));
if (isNaN(radius) || radius <= 0) {
alert("有効な半径を入力してください。");
return;
}
// N角形までを指定
var maxSides =
        parseInt(prompt("最大の角数を入力してください: ", "12"));
if (isNaN(maxSides) || maxSides < 3) {
alert("有効な角数を入力してください (3以上)。");
return;
}
// 描画位置を指定(これじゃダメみたい)
var doc = app.activeDocument;
var startX = radius * 1.5;
var centerY = doc.height / 2;
var leftEdge = 0 + radius;
// 3角形からN角形までを描画
for (var sides = 3; sides <= maxSides; sides++) {
drawRegularPolygon(sides, radius, leftEdge + (sides - 3) *
        (radius * 2.5), centerY);
}
}
main();

実行したら半径値を入力・・・

続けてN角形までの数を入力すれば・・・

自動的に描画しますが、どうしてもドキュメントの中に描画出来ないので、画面を縮小表示して確認してください。この問題解決はチョット時間が掛かりそうです。