辺の長さを指定して正N角形を描画させます。(RGB版)
正多角形の・・・
辺の長さをL
半径をr
正多角形の画数をN
とすると・・・
L=2×r×sin(180°/N)
となり、Excelで計算させると
A1にr、A2にNっを指定し、B1に・・・
L=2*A1*sin(PI()/A2)
で求めることが出来ます。これを応用して・・・
function mmToPt(mm) {
return mm * 2.83465; // mm を pt に変換
}
function drawRegularPolygon(sideLengthMM, sides) {
if (sides < 3) {
alert("3以上の辺の数を入力してください。");
return;
}
var doc = app.activeDocument;
var artboard =
doc.artboards[doc.artboards.getActiveArtboardIndex()];
var bounds = artboard.artboardRect;
var centerX = (bounds[0] + bounds[2]) / 2;
var centerY = (bounds[1] + bounds[3]) / 2;
var sideLengthPt = mmToPt(sideLengthMM);
var radiusPt = sideLengthPt / (2 * Math.sin(Math.PI / sides));
// 外接円半径
var angleStep = 360 / sides;
var pathPoints = [];
for (var i = 0; i < sides; i++) {
var angle = (angleStep * i - 90) * Math.PI / 180;
var x = centerX + radiusPt * Math.cos(angle);
var y = centerY + radiusPt * Math.sin(angle);
pathPoints.push([x, y]);
}
var polygon = doc.pathItems.add();
polygon.setEntirePath(pathPoints.
concat([pathPoints[0]])); // 最後に始点を追加して閉じる
polygon.closed = true;
// ランダムなRGB塗り色
polygon.filled = true;
polygon.fillColor = getRandomRGBColor();
polygon.stroked = true;
polygon.strokeColor = getBlackColor();
polygon.strokeWidth = 1;
}
function getRandomRGBColor() {
var color = new RGBColor();
color.red = Math.random() * 255;
color.green = Math.random() * 255;
color.blue = Math.random() * 255;
return color;
}
function getBlackColor() {
var color = new RGBColor();
color.red = 0;
color.green = 0;
color.blue = 0;
return color;
}
// ユーザー入力
var sideLengthMM = Number(prompt("1辺の長さをmmで入力", "50"));
var sides = Number(prompt("辺の数を入力(3以上)", "6"));
if (!isNaN(sideLengthMM) && sideLengthMM >
0 && !isNaN(sides) && sides >= 3) {
drawRegularPolygon(sideLengthMM, sides);
} else {
alert("正しい値を入力してください。");
}
実行したら、1辺の長さを指定し・・・
辺の数を入力すれば・・・
描画します。色はRGBのランダム色で生成されます。