【パターン-10】三角形をランダムに並べるパターン

シェアする

三角形をランダムに回転させて配置するプログラムです。
15~19行 画面サイズ(gw,gh)をグリッド数(grid)で割ってグリッド幅(w,h)出しています。
28行 グリッド幅を三角形の一辺(hen)とします。
30行 回転角度(0度 90度 180度 270度 360度)をang配列に入れます。
37行 そこから0〜4までの乱数を発生させて(rand 5 mod)角度を取り出し(get)回転(rotate)します。
38〜39行 三角形を描きます。ここでは相対位置を使用して線分を追加しています。
47~56行 縦と横のx,y座標を繰り返し計算して、三角形プロシージャに値を渡して行きます。


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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 720 720
%%HiResBoundingBox: 0 0 720 720
%%CropBox:  0 0 720 720
%%Title:三角形ランダム配置パターン001
%%Creator:Studio Fruit Jam / Toyokazu Nishi

% ================ 座標変換 ================
0 0 translate
% ================ 背景 =================
/DeviceRGB setcolorspace % カラースペース設定
0 0 0 setrgbcolor % 黒
0 720 720 -720 rectfill % 黒四角形を配置
% ================ 定義 ================
/gw 720 def % 画面横サイズ
/gh 720 def % 画面縦サイズ
/grid 10 def % グリッド数
/w gw grid div def % グリッド横幅
/h gh grid div def % グリッド縦幅
/hc 1 def % 色相
/sc .6 def % 彩度
/bc 1 def % 明度

% ================================================
%  三角形をランダムに配置する
% ================================================

/hen w def % 三角形の一辺の長さ(グリッド横と同じにする)
/hen2 hen 2 div def % 一辺の長さの半分
/ang [ 0 90 180 270 360 ] def  % 三角形の回転角度の配列

/triangle {  % 三角形プロシージャ
        /dy exch def % y座標を取得
        /dx exch def % x座標を取得
        dx dy translate % x y 座標に移動
        hen2 dup translate % 38行で回転の中心を移動する分の補正
        ang rand 5 mod get rotate % 配列からランダムに角度を取得し、回転する
        hen2 neg dup moveto % 三角形の回転の中心を移動する
        hen 0 rlineto 0 hen rlineto closepath % 三角形描画
        hc sc bc sethsbcolor % カラー設定
        fill % 塗りつぶす
} def

% ================================================
%  メイン
% ================================================
0 1 grid 1 sub { % 0〜9まで繰り返す
        /yrow exch def % 縦のグリッド数を取得
        /y yrow h mul def % y座標を計算
        0 1 grid 1 sub { % 0〜9まで繰り返す
                /xcol exch def % 横のグリッド数を取得
                /x xcol w mul def % x座標を計算
                gsave x y triangle grestore  % 三角形プロシージャ呼び出し
                /hc hc .01 sub def  % 色相から0.01引く
        } for
} for

【応用例】