放射状の線を描いてみましょう。
最初に原点からy軸正方向に直線を引きます。
rotateで座標を回転させて次々と直線を引いていきます。
360-kにするのは最後に線が重ならないようにするため。
やってみよう 角度kの値を色々変えてみましょう。
1
2
3
4
5
6
7
8
9
10
11 %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:放射状の線を描く
/k 10 def % 角度
120 120 translate % 座標の原点を中央に移動
newpath % パスの初期化
0 k 360 k sub { % 0からkづつ増やし360-kになるまで{ }内を繰り返す
pop % 制御変数を削除
0 0 moveto 0 100 rlineto stroke % 原点からy軸正方向に直線を引く
k rotate % 座標をk度回転する
} for
modとif文を使って、交互に色を変えます。
制御変数を4で割った余りが2の場合にcol1(赤)、それ以外はcol2(黒)にします。
スタックに入った制御変数を使って計算します。(制御変数を変数に代入しない例)
1
2
3
4
5
6
7
8
9
10
11
12
13 %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:交互に水平線を描く
/col1 { 1 0 0 setrgbcolor } def % 赤
/col2 { 0 0 0 setrgbcolor } def % 黒
/k 10 def % 角度
120 120 translate % 座標の原点を中央に移動
newpath % パスの初期化
0 k 360 k sub { % 0からkづつ増やし360-kになるまで{ }内を繰り返す
4 mod 2 eq { col1 } { col2 } ifelse % 2なら赤、さもなくば黒
0 0 moveto 0 100 rlineto stroke % 原点からy軸100ポイントに線を引く
k rotate % 座標をk度回転する
} for
制御変数をsに入れて使用したコードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:交互に水平線を描く
/col1 { 1 0 0 setrgbcolor } def % 赤
/col2 { 0 0 0 setrgbcolor } def % 黒
/k 10 def % 角度
120 120 translate % 座標の原点を中央に移動
newpath % パスの初期化
0 k 360 k sub { % 0からkづつ増やし360-kになるまで{ }内を繰り返す
/s exch 4 mod def % 制御変数を4で割った余りをsに入れる
s 2 eq { col1 } { col2 } ifelse % 2なら赤、さもなくば黒
0 0 moveto 0 100 rlineto stroke % 原点からy軸100ポイントに線を引く
k rotate % 座標をk度回転する
} for
コメント