【パターン-6】円を並べてパターンを作ってみよう3

円を並べてパターンを作ってみよう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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次