So-net無料ブログ作成

円を並べてパターンを作ってみよう2 [PostScript]

パターン


円パターン配列カラー.png
円を並べてパターンを作ってみよう配列randの応用で円にランダムに4色を割り当てます。
カラー配列を4個用意し、col配列に入れておきます。
/col [ [ 0 0 1 ] [ 0 .8 1 ] [ .8 0 1 ] [ .5 .5 1 ] ] def
そこからランダムに0から3が返るので(rand 4 mod)、それをindexとしてcol配列からカラー配列を取り出します。(get)
配列の全要素をスタックに置きます。(aload)不要なオペランドも置かれますので削除します。(pop)
置かれた値でカラーを設定します。(setrgbcolor)

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:円のパターン /r 10 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 0 1 ] [ 0 .8 1 ] [ .8 0 1 ] [ .5 .5 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 } for } for

【オペレータの説明】
整数 array
整数個の要素の配列を作成します。初期値で空要素nullが入ります。
他の要素で置き換える場合はcopy等を使用します。
(例)
3 array → [-null- -null- -null-]
/x 3 array def → [-null- -null- -null-]
※ 配列の長さは可変長にできません。(追加・削除・挿入ができない)
ただし置き換えはできます。

[ 要素 ]
配列を作成します。
(例)
[ 1 2 3 4 5 ] → [ 1 2 3 4 5 ]
/x [ 1 2 3 4 5 ] def → [ 1 2 3 4 5 ]

配列 index get
配列からindex番目の要素を返します。
(例)/x [ 1 2 3 4 5 ] def
x 3 get → 4  0番から始めて3番目の4が返る
(例)/x [[ 1 2 3 4 5 ][ 6 7 8 9 10 ]] def
x 1 get → [ 6 7 8 9 10 ] 1番目の配列が返る

配列 aload
配列の全要素をスタックに格納します。
(例)/x [ 1 2 3 4 5 ] def
x aload → [ 1 2 3 4 5 ] 5 4 3 2 1  配列から要素をスタックにプッシュした後、配列そのものもプッシュする。 配列が不要な場合はpop(削除)する。→ 5 4 3 2 1
配列 length
配列の要素数を返します。
(例)/x [ 1 2 3 4 5 ] def
x length → 5

配列 index 要素2 put
配列からindex番目の要素を要素2で置き換えます。
(例)/x [ 1 2 3 4 5 ] def
x 3 (abc) put → [ 1 2 3 (abc) 5 ] 0番から始めて3番目の4が(abc)に置き換わる。

配列1 配列2 copy
配列1の要素を配列2の部分配列にコピーします。(置換する) (配列1より配列2の要素が少ないとエラー)
(例)/a [ 1 2 3 4 5 ] def /b [ null null null null null 6 7 ] def
a b copy → [ 1 2 3 4 5 6 7 ]

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました