円を並べてパターンを作ってみよう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 %!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
【オペレータの説明】
論理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 |
コメント