【直線-15】方眼を描いてみよう

方眼を描いてみましょう。

【直線-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で割った値を返す