テキスト(文字)をサインカーブに沿って配置する

■プログラム説明(ソースコード説明)
 変数に振幅、角度、XY座標、周期を設定します。文字の数だけ繰り返し処理を行い、サイン値をMath.sin()を使って求めます。コサインカーブにしたい場合はMath.cos()にします。サイン値に振幅を乗算しY座標を求めます。translate()を使って指定座標に文字を移動します。

■ソースコード
str = "文字列がサインカーブに沿って自動的に配置されます。手作業では簡単そうで面倒な処理です。";
h = 60; // 振幅
d = 4; // 何度ずつ角度を移動させるか
x = 0; // X座標
dx = 10; // 横の移動量
max = 360 * 2; // 周期

docObj = activeDocument;
for (i=0; i<str.length; i++)
{
n = (i * (max / str.length)) * Math.PI / 180;
y = Math.sin(n) * h;
x = x + dx;
txtObj = docObj.textFrames.add();
txtObj.contents = str.charAt(i);
txtObj.translate(x,y);
}


■使い方
1:描画するドキュメントをアクティブにします。
2:ファイルメニューからスクリプトを実行します。
3:文字がサインカーブに沿って配置されます。


■ポイント
 文字を個別に分割せずに1行のテキストとして処理する場合にはベースラインシフトを使って位置をずらします。以下がサンプルになります。

str = "文字列がサインカーブに沿って自動的に配置されます。手作業では簡単そうで面倒な処理です。";
h = 60; // 振幅
d = 4; // 何度ずつ角度を移動させるか
x = 0; // X座標
dx = 10; // 横の移動量
max = 360 * 2; // 周期

docObj = activeDocument;
txtObj = docObj.textFrames.add();
txtObj.contents = str;
txt = txtObj.textRange;
for (i=0; i<str.length; i++)
{
n = (i * (max / str.length)) * Math.PI / 180;
txt.characters[i].baselineShift = Math.sin(n) * h;
}

■実際のスクリプトをダウンロード(sample.js.zip)