

短い直線を繋げて円を描きます。
n=100 くらいで線がスムースに見えます。
円の方程式 x=cos(th)*r、y=sin(th)*rに繰り返しでthに角度を入れることで円が描けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:短い線を繋げて円を描く /r 100 def % 円の半径 /sw 0 def % movetoを1回だけ使用するスイッチ /n 100 def % N角形を設定(100程度でスムースに見える) /step 360 n div def % ステップ数(角度)step=360/n 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 % 0から360-stepまでstepづつ増分しながら { } 内を繰り返す % 360-stepしているのは最後にclosepathで繋げたいからです 0 step 360 step sub { /th exch def % 制御変数をth(角度)に入れる /x th cos r mul def % 円の方程式 x=cos(th)*r /y th sin r mul def % 円の方程式 y=sin(th)*r % swが0なら始点を置きswを1にする。さもなくば、終点にラインを引く sw 0 eq { x y moveto /sw 1 def} { x y lineto } ifelse } for closepath % 線を繋げる 1 0 0 setrgbcolor % 赤色 5 setlinewidth % 線幅5ポイント stroke % 描画する |

楕円を描きます。
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 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:短い線を繋げて楕円を描く /rx 100 def % 楕円のx軸半径 /ry 50 def % 楕円のy軸半径 /sw 0 def % movetoを1回だけ使用するスイッチ /n 100 def % N角形を設定(100程度でスムースに見える) /step 360 n div def % ステップ数(角度)step=360/n 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 % 0から360-stepまでstepづつ増分しながら { } 内を繰り返す % 360-stepしているのは最後にclosepathで繋げたいからです 0 step 360 step sub { /th exch def % 制御変数をth(角度)に入れる /x th cos rx mul def % 円の方程式 x=cos(th)*rx /y th sin ry mul def % 円の方程式 y=sin(th)*ry % swが0なら始点を置きswを1にする。さもなくば、終点にラインを引く sw 0 eq { x y moveto /sw 1 def} { x y lineto } ifelse } for closepath % 線を繋げる 1 0 0 setrgbcolor % 赤色 5 setlinewidth % 線幅5ポイント stroke % 描画する |

nの値を変えると多角形が描けます。
図はn=8で8角形になります。
やってみよう nの値を色々変えてみてください。
(コードは省略)
コメント