【円弧-8】短い線を繋げて円を描こう

短い直線を繋げて円を描きます。
n=100 くらいで線がスムースに見えます。
円の方程式 x=cos(th)*r、y=sin(th)*rに繰り返しでthに角度を入れることで円が描けます。

x=sin(th)*r、y=cos(th)*r サインコサインを入れ替えても結果は同じとなります。


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の値を色々変えてみてください。
(コードは省略)


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次