

円を回転させて環を作成します。
円の公式、x=r*cos(th)、y=r*cos(th)を使い、計算された座標に円を描いていきます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:円環 % ========= 定義 ========= /r 30 def % 半径 /s 2 def % 円と円の間隔 /dx 80 def % 横の大きさ /dy 80 def % 縦の大きさ .5 setlinewidth 0 setgray 0 0 240 240 rectstroke % 黒枠 120 120 translate % 座標の原点を中央に移動 % ======= メイン ========= newpath % パスの初期化 0 s 360 s sub { % 楕円軌道(0から360-sまでs刻みで{ }内を繰り返す /th exch def % 制御変数をth(角度)に入れる /x dx th cos mul def % 円公式 /y dy th sin mul def % 円公式 x y r 0 360 arc stroke % (x,y)に半径rで円を描く } for |
縦と横の大きさを変えて、楕円軌道にしました。最初と最後の円で色がスムースに繋がるようには考慮していません。

その他、円環を重ねたり
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 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title: 円環 % ========= 定義 ========= /r 30 def % 半径 /s 2 def % 円と円の間隔 /dx 80 def % 横の大きさ /dy 20 def % 縦の大きさ % ========= カラー定義 ========= /hc01 .7 def % 色相初期値 /hc02 1 def % 色相最大値 /dc .003 def % 色相増分値 .5 setlinewidth 0 0 0 setrgbcolor 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 % ======= メイン ========= newpath % パスの初期化 0 s 360 s sub { % 楕円軌道(0から360-sまでs刻みで{ }内を繰り返す /th exch def % 制御変数をth(角度)に入れる /x dx th cos mul def % 円公式 /y dy th sin mul def % 円公式 hc01 1 1 sethsbcolor %カラー設定 x y r 0 360 arc stroke % (x,y)に半径rで円を描く % 色相初期値が最大値と同じか超えたら増分値の符号を反転する hc01 hc02 ge { /dc dc neg def } if /hc01 hc01 dc add def % 色相初期値に増分値を足す } for |

細長い楕円を回転させるなど、様々なバリエーションが考えられます。


コメント