
下記のコードは塗りつぶしの円が重なっているだけなのに、同心円になるというコードです。
Illustratorで言うところの複合パスを使用します。
要はパスが重なった部分は、抜けて透明になるという機能です。
ここでは半径を大きくして円が重なっていますが、fillではなくeofillオペレータを使用して
重なった部分を抜いているので、同心円になるというトリックです。
eofillをfillに変えると真っ暗な円になってしまいます。

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 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 720 720 %%HiResBoundingBox: 0 0 720 720 %%CropBox: 0 0 720 720 %%Title:eofill使用で同心円 %%Creator:Studio Fruit Jam / Toyokazu Nishi %%Copyright:Studio Fruit Jam / Toyokazu Nishi %%CreationDate:2019年1月17日 木曜日21:44:15 % ================ 座標変換 ================ 360 dup translate 1 dup scale % ================ 背景 ================= 1 1 1 setrgbcolor -360 360 720 -720 rectfill % ================ 定義 ================ 0 0 0 setrgbcolor /r 10 def % 円の初期半径 /dt 20 def % 半径の増値 % ================ メイン================ 18 { % 18回以下を繰り返す 0 0 r 0 360 arc % 円を引く /r r dt add def % 半径を大きくする } repeat eofill % 奇偶規則を使用し、パスの内側を塗りつぶす |
次は上下左右から円を大きくした図形を描きます。
最後にstrokeしているため、余分な直線が入っています。
連続して円を引いているためパスが繋がってしまった結果です。
これはこれでeofillで塗りつぶした時に思わぬ図形になります。

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 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 720 720 %%HiResBoundingBox: 0 0 720 720 %%CropBox: 0 0 720 720 % コンピュータ・グラフィックス P32より %%Title: マルチサークル10 上下左右から %%Creator:Studio Fruit Jam / Toyokazu Nishi %%Copyright:Studio Fruit Jam / Toyokazu Nishi %%CreationDate2016年1月30日土曜日17:47:22 %%CreationDate:2018年5月18日金曜日午前11:49:32 %%ModificatioDate:2019年1月17日 木曜日23:30:39 % ================ 座標変換 ================ 40 360 translate 1 dup scale % ================ 背景 ================= /DeviceRGB setcolorspace % カラースペース設定 1 1 1 setrgbcolor -360 360 720 -720 rectfill % ================ 定義 ================ /s 80 def % ステップ数 最大値を割り切れる数に /max 320 def % 最大値 % ================ メイン================ 0 0 0 setrgbcolor newpath % パスの初期化 0 s max { /i exch def i 0 i 0 360 arc % 左 max max i sub i 0 360 arc % 上 max s neg 0 { /k exch def max 2 mul k sub 0 k 0 360 arc % 右 max max neg k add k 0 360 arc % 下 } for } for stroke |
上記コードの最後のstrokeをeofillに変えると、下記のような図形となります。
冒頭の作例は上記のコードのstep数を細かくし、グラデーションを加えたものです。

【オペレータの説明】
eofill | パスの内側を奇遇規則を使用して内部領域を判定し、塗りつぶす。 |
コメント