数学曲線を描く

数学的な曲線を描く機能はPhotoshopには用意されていません。ということで今回はPhotoshopでも数学的曲線を描くスクリプトです。基本的には前回のIllustratorのものと同じです。が、同じAdobe製品でもアプリケーション独自部分には互換性がないので(当然ですが)、同じスクリプトでは動作しません。
Photoshopの場合に数学的曲線を描かせる方法としては選択範囲を作成して塗りつぶしていく方法とパスを描いて、そのパスにブラシや鉛筆の形状を適用する方法があります。サンプルではIllustrator同様にパスを作成し、パスにそってブラシで曲線を描きます。
以下のスクリプトを実行すると現在の色、ブラシ形状でサインカーブが描かれます。

w = 1; // 横の拡大率
h = 100; // 縦の拡大率
step = 5; // 計算上の間隔
startP = 0; // 開始角度
endP = 360; // 終了角度
offsetX = 100; // X座標のオフセット
offsetY = 200; // Y座標のオフセット
passData = [];
lineData = [];
count = 0;
for (i=startP; i<=endP; i+=step)
{
r = i * Math.PI / 180;
y = Math.sin(r) * h;
x = i * w;
x = x + offsetX;
y = y + offsetY;
passData[count]= new PathPointInfo();
passData[count].kind = PointKind.CORNERPOINT;
passData[count].anchor = [x, y];
passData[count].leftDirection = [x, y];
passData[count].rightDirection = [x, y];
count++;
}
lineData[0] = new SubPathInfo();
lineData[0].operation = ShapeOperation.SHAPEADD;
lineData[0].closed = false;
lineData[0].entireSubPath = passData;
docObj = activeDocument;
pObj = docObj.pathItems.add("Sin", lineData);
pObj.strokePath(ToolType.BRUSH);
pObj.remove();


曲線を変更するのであれば

y = Math.sin(r) * h;
x = i * w;

の数式を

y = Math.cos(r) * Math.sin(r) * h;
x = Math.cos(r) * w;

のようにすると、いろいろな曲線を描く事ができます。また、Illustratorと異なり不要になったパスは消していますが、もしパスを残しておきたい場合には一番最後の行にある

pObj.remove();

を削除してください。これでパスデータを残すことができます。




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