【曲線-1】SINカーブを描こう

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  % 線を描画する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次