

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 |
放射状の線を描いてみましょう。
最初に原点からy軸正方向に直線を引きます。
rotateで座標を回転させて次々と直線を引いていきます。
360-kにするのは最後に線が重ならないようにするため。
やってみよう 角度kの値を色々変えてみましょう。

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 |
コメント