【直線-21】放射状パターン

放射状の線を描きます。
四角の枠を等間隔に分割し、そこと原点とを結んで放射状にします。
それゆえ4隅では線と線の間隔が他と比べると細くなります。


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 720 720
%%HiResBoundingBox: 0 0 720 720
%%CropBox: 0 0 720 720
%%Title:放射状の線
%%Creator:Studio Fruit Jam / Toyokazu Nishi
%%Copyright:Studio Fruit Jam / Toyokazu Nishi
%%CreationDate:2018年8月2日 木曜日午前11:07:08
% ================ 座標変換 ================
360 360 translate % 座標の原点を中央に移動
% ================ 背景 =================
/DeviceRGB setcolorspace  % カラースペース設定
0.56078 0.78431 0.82745 setrgbcolor
-360 360 720 -720 rectfill

% ====================== 初期値
/ds 360 def % 描画サイズ
/s 20 def % 線の間隔(変更可)
1 1 1 setrgbcolor % 白線

% ================================================
%  メイン
% ================================================
newpath % パスの初期化
ds neg s ds { % -ds〜dsまでs刻みで増分し { }内を繰り返す
  /dt exch def % 制御変数をdtに入れる
  0 0 moveto dt ds lineto % (0,0)中心点から(dt,ds)に線を引く:上
  0 0 moveto dt ds neg lineto % (0,0)から(dt,-ds)に線を引く:下
  0 0 moveto ds dt lineto % (0,0)から(ds,dt)に線を引く:右
  0 0 moveto ds neg dt lineto % (0,0)から(-ds,dt)に線を引く:左
} for stroke

応用例

放射状のパターンをプロシージャ化して4個並べます。


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
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 720 720
%%HiResBoundingBox: 0 0 720 720
%%CropBox: 0 0 720 720
%%Title:放射状の線
%%Creator:Studio Fruit Jam / Toyokazu Nishi
%%Copyright:Studio Fruit Jam / Toyokazu Nishi
%%CreationDate:2018年8月2日 木曜日午前11:33:29

% ================ 背景 =================
/DeviceRGB setcolorspace  % カラースペース設定

% ====================== 初期値
/ds 360 def % 描画サイズ
/w ds 2 mul def
/init { 360 dup translate } def % 座標の原点を中央に移動
/c1 { /rc .5 def /gc .3 def /bc .8 def } def % 以下カラー設定
/c2 { /rc .8 def /gc  0 def /bc .5 def } def
/c3 { /rc  0 def /gc .5 def /bc  1 def } def
/c4 { /rc .7 def /gc  0 def /bc .7 def } def

/rad { % 放射状の線を描くプロシージャ
  newpath % パスの初期化
  rc gc bc setrgbcolor % 色設定
  ds neg dup w dup rectfill % バックのタイル
  ds neg 10 ds { % 放射状の線を描く
    /dt exch def
    0 0 moveto dt ds lineto
    0 0 moveto dt ds neg lineto
    0 0 moveto ds dt lineto
    0 0 moveto ds neg dt lineto
    } for
    1 0 .6 setrgbcolor
    stroke
} def
% ================================================
%  メイン
% ================================================
gsave gsave gsave % グラフィックス状態を3回保存
init c1 .5 dup scale ds neg ds translate rad % パターンを縮小して左上に配置
grestore % グラフィックス状態を復帰
init c2 .5 dup scale ds ds translate rad % 右上に配置
grestore
init c3 .5 dup scale ds ds neg translate rad % 左下に配置
grestore
init c4 .5 dup scale ds neg ds neg translate rad % 右下に配置