円を並べてパターンを作ってみよう2に3行コードを追加して、円を大きくしたり小さくしたりします。
追加するのは
/dt 1 def % 円の半径を増減させる値
/r r dt add def % 円の半径に増減値を足す
% 円の半径が10以上または3以下なら増減値の符号を反転させます。
r 10 gt r 3 lt or { /dt dt neg def } if
円の半径が10以上になったら、dtを-dtにしてrから引いていくことで円が小さくなります。
また半径が3以下になったら-dtをdtにして次第に円が大きくなっていきます。
これが繰り返されていきます。
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 29 30 31 32 33 |
[cc lang="postscript" tab_size=“4” lines="40" highlight=“0”] %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:円のパターン /r 10 def % 円の半径 /dt 1 def % 増減値 /step 20 def % 円と円の間隔 /h 120 r add def % 高さ(パターンが端で不完全にならないよう円の半径分足す) /w 120 r add def % 幅(パターンが端で不完全にならないよう円の半径分足す) % 幅・高さを間隔で割って余りをkx、kyに入れる(パターンを天地左右対象に囲みに入れるため) /kx w step mod def /ky h step mod def /col [ [ 0.444 1 0.81 ] [ 0.541 0.83 .79 ] [ 0.583 0.5 0.63 ] [ 0.025 0.56 1 ] ] def % カラー配列を作る 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 w neg step w { % -120から30づつ増やし120になるまで { }を繰り返す /dx exch def % 制御変数をdxに入れる h neg step h { % -120から30づつ増やし120になるまで { }を繰り返す /dy exch def % 制御変数をdyに入れる % 0〜3のランダムな値(rand 4 mod)で配列colからカラー配列を % 取り出し(get)、スタックに置き(aload)、 % オペランドは削除(pop)してカラー設定する(setrgbcolor) col rand 4 mod get aload pop setrgbcolor % dx,dyが中心の半径10の円を描く(kx、kyの余りを足して位置の調整) dx kx add dy ky add r 0 360 arc stroke /r r dt add def % 円の半径に増減値を足す % 半径が10以上または3以下なら増減値の符号を反転する r 10 gt r 3 lt or { /dt dt neg def } if } for } for [/cc] |
【オペレータの説明】
論理1 論理2 and | 論理積を求めます (例) true true and → true true false and → false false true and → false false false and → false |
論理1 not | 論理否定を求めます (例) true not → false false not → true |
論理1 論理2 or | 論理和を求めます (例) true true or → true true false or → true false true or → true false false or → false |
論理1 論理2 xor | 排他的論理和を求めます (例) true true xor → false true false xor → true false true xor → true false false xor → false |
コメント