【多角形-2】多角形を描いてみよう

Postscriptで多角形を描いてみましょう。
短い線を繋げて円を描こうでは円の方程式を使って多角形を描きましたが、今回はrotateを使って頂点を回転させて線を繋ぐ方法です。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:多角形を描く
120 120 translate % 座標の原点を中央に移動
/n 8 def % N角形 3以上
/k 360 n idiv def % 角度
/r 90 def % 図形の半径
/sw 0 def % movetoを一回だけ使用するためのスイッチ

newpath % パスの初期化
0 k 360 k sub { % 0からKづつ増やし360-Kになるまで{ }内を繰り返す
    pop % 制御変数を捨てる
    % swが0ならば始点を、さもなくば線を引く
    sw 0 eq { 0 r moveto /sw 1 def } { 0 r lineto } ifelse
    k rotate % 座標をK度回転する
    0 r lineto % 線を引く
} for
closepath % 最後に線をつなぐ
.5 .7 .7 sethsbcolor % 青緑色にする
10 setlinewidth % 線幅10ポイント
stroke % 描画する

次は応用編です。for文を足して、図形の大きさと線幅を変化させてみましょう。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:多角形を描く

120 120 translate % 座標の原点を中央に移動
/n 8 def % N角形 3以上(整数のみ)
/k 360 n idiv def % 角度
% r 図形の半径
/sw 0 def % movetoを一回だけ使用するためのスイッチ
/lw 10 def % 線幅
.5 .7 .7 sethsbcolor % 青緑色にする

newpath % パスの初期化
10 10 100 { % 0から10づつ増やし100になるまで{ }内を繰り返す
    /r exch def % 制御変数をr(半径)に入れる
     0 k 360 k sub { % 0からKづつ増やし360-Kになるまで{ }内を繰り返す
        pop % 制御変数を捨てる
        % swが0ならば始点を、さもなくば線を引く
        sw 0 eq { 0 r moveto /sw 1 def } { 0 r lineto } ifelse
        k rotate % 座標をK度回転する
        0 r lineto % 線を引く
    } for
    closepath % 最後に線をつなぐ
    /sw 0 def % スィッチのリセット
    /lw lw 1 sub def % 線幅から1を引く
    lw setlinewidth % 線幅を設定
    stroke % 描画する
} for
【オペレータの説明】
整数1 整数2 idiv 整数1を整数2で割って、整数の商を返す。
小数点以下は切り捨て。
(例)idivとdivの違い
3 2 idiv → 1
3 2 div → 1.5