PostScriptでSINカーブを描きます。
短い直線を繋げて曲線とします。th(角度)を細くするとスムースな曲線になります。
SINカーブの数式をPostScriptで書くと下記になります。
x=a*th → /x a th mul def
y=b*sin(th) → /y b th sin mul def
やってみよう a:波の長さ、b:波の高さ、th:角度の値を色々変えてみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:SINカーブを描く
/a .3 def % 波の長さ
/b 80 def % 波の高さ
/sw 0 def % 始点を置くためのスイッチ
120 120 translate % 座標の原点を中央に移動
newpath % パスの初期化
-360 1 360 { % -360から360まで角度を1づつ増やして{ }内を繰り返す
/th exch def % 制御変数をth(角度)に入れる
/x a th mul def % a×th 波の長さを変化させる
/y b th sin mul def % b×sin(th) 波の高さを変化させる
% swが0の時始点をさもなくば 線を引く
sw 0 eq { x y moveto /sw 1 def }{ x y lineto } ifelse
} for
stroke % 線を描画する
for文を追加して、波の高さを変化させて見ましょう。
制御変数を波の高さbに入れていきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:SINカーブを描く
/a .3 def % 波の長さ
/sw 0 def % 始点を置くためのスイッチ
120 120 translate % 座標の原点を中央に移動
newpath % パスの初期化
20 10 100 { % 20から100まで波の高さを10づつ増やして{ }内を繰り返す
/b exch def % 制御変数を波の高さbに入れる
-360 1 360 { % -360から360まで1づつ増やして{ }内を繰り返す
/th exch def % 制御変数をth(角度)に入れる
/x a th mul def % a×th 波の長さを変化させる
/y b th sin mul def % b×sin(th) 波の高さを変化させる
% swが0の時始点をさもなくば 線を引く
sw 0 eq { x y moveto /sw 1 def }{ x y lineto } ifelse
} for
/sw 0 def % swをリセットする
} for
stroke % 線を描画する
コメント