等比数列 (Illustrator CS2/CS3編)

Illustratorでは等差数列に従った図形は手軽に描く事ができますが、等比数列の場合は簡単にはできません。このような場合はスクリプトの方が適しています。 以下のスクリプトは等比数列の計算式を使って図形を描きます。ここで使っている計算式は 結果 = 2 × (dのn乗) となっています。

expr = "x = 2 * ( Math.pow(d, n) );";
d = eval(prompt("dの値を入れてください", 4));
count = prompt("回数を入れてください", 6);
function setColor(r,g,b)
{
var tmpColor = new RGBColor();
tmpColor.red = r;
tmpColor.green = g;
tmpColor.blue = b;
return tmpColor;
}
layerObj = app.activeDocument.activeLayer;
for (n=0; n<count; n++)
{
x = eval(expr);
y = 0;
pObj = layerObj.pathItems.rectangle(0,0,2,10);
pObj.filled = true; // 塗りあり
pObj.stroked = true; // 線あり
pObj.strokeWidth = 1; // 線幅10ポイント
pObj.fillColor = setColor(255,0,0); // 塗りの色を指定(赤色)
pObj.strokeColor = setColor(0,0,255); // 線の色を指定(青色)
pObj.translate(x,0);
}

決められた数式ではなく、任意の数式にしたい場合には以下のスクリプトを使ってください。

expr = prompt("数式を入れてください","x = 2 * ( Math.pow(d, n) );");
d = eval(prompt("dの値を入れてください", 4));
count = prompt("回数を入れてください", 6);
function setColor(r,g,b)
{
var tmpColor = new RGBColor();
tmpColor.red = r;
tmpColor.green = g;
tmpColor.blue = b;
return tmpColor;
}
layerObj = app.activeDocument.activeLayer;
for (n=0; n<count; n++)
{
x = eval(expr);
y = 0;
pObj = layerObj.pathItems.rectangle(0,0,2,10);
pObj.filled = true; // 塗りあり
pObj.stroked = true; // 線あり
pObj.strokeWidth = 1; // 線幅10ポイント
pObj.fillColor = setColor(255,0,0); // 塗りの色を指定(赤色)
pObj.strokeColor = setColor(0,0,255); // 線の色を指定(青色)
pObj.translate(x,0);
}

指定できる数式ですが、必ずx=で始まり右側に数式を書きます。Math.pow()は指定した数値のn乗を返す関数です。Math.pow(2,8)であれば2の8乗になります。
実際にはx=以後は、数式であればエラーにはなりません。x=100でもx=100*dでも正しく動作します。

[サンプルをダウンロード]