

方眼を描いてみましょう。
【直線-14】で描いた複数の水平線と垂直線を合わせればできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 /x 100 def % x座標 -100 20 100 { % -100から20づつ増やし100になるまで { } 内を繰り返す /y exch def % y(座標)へ制御変数を入れる x neg y moveto % 始点へ移動 x 2 mul 0 rlineto % 始点と終点の間にパスを引く } for /y 100 def % y座標を100とする -100 20 100 { % -100から20づつ増やし100になるまで { } 内を繰り返す /x exch def % x(座標)へ制御変数を入れる x y moveto % 始点へ移動 0 y 2 mul rlineto % 始点と終点の間にパスを引く } for stroke % 線を描画 |
これはこれでもいいですが、同じ処理が繰り返されています。
プロシージャを使ってもっと簡潔にしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 /x 100 def % x座標を100とする /y 100 def % y座標を100とする /h_line { % 水平線を引くプロシージャ x neg pos moveto % posには制御変数が入る(-100,-80,-60....80,100) x 2 mul 0 rlineto } def /v_line { % 垂直線を引くプロシージャ pos y moveto 0 y 2 mul neg rlineto } def 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 -100 20 100 { % -100から20づつ増やし100になるまで { } 内を繰り返す /pos exch def % 制御変数をposに入れる h_line % h_lineプロシージャを呼び出す v_line % v_lineプロシージャを呼び出す } for stroke % 線を描画 |
さらに方眼を引くプロシージャで簡潔にしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 /x 100 def % x座標を100とする /y 100 def % y座標を100とする /line { % 方眼を引くプロシージャ x neg pos moveto % 水平線を引く x 2 mul 0 rlineto pos y moveto % 垂直線を引く 0 y 2 mul neg rlineto } def 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 -100 20 100 { % -100から20づつ増やし100になるまで { } 内を繰り返す /pos exch def % 制御変数をposに入れる line % lineプロシージャを呼び出す } for stroke % 線を描画 |
【オペレータの説明】
/キー { 処理 } def | 複数の処理を一つにまとめるとプログラムが簡潔になり、メンテしやすくなります。これを手続き(プロシージャ)と言います。 例)/heikin { add 2 div } def % 2つの数値の和の平均を求める 30 70 heikin |
数値1 数値2 add | 数値1と数値2を足した値を返す |
数値1 数値2 div | 数値1を数値2で割った値を返す |
コメント