【曲線-5】スピログラフ(内トコロイド曲線)を描いてみよう

SPIROGRAPHは登録商標だそうで、内トコロイド曲線等を描く定規です。
ググって見るとスピログラフデラックスとか言って何千円もするのがあって驚きです。
子供の頃、面白くて遊んだことがありますが、1度やったらもう飽きてしまって。
昔は多色ボールペンぐらいしかカラーの筆記具がなくて、書いている内にインクのダマができて汚くなったりした記憶があります。

内トコロイド(rd=rmの時内サイクロイド)
x=(rc-rm)*cos(th)+rd*cos((rc-rm)/rm*th )
y=(rc-rm)*sin(th)-rd*sin((rc-rm)/rm*th )


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 240 240
%%Title:内トコロイド曲線
/rc 50 def % 外側の円の半径(定円)
/rm .5 def % 歯車の半径(動円)
/rd 60 def % 描画点の半径(動円内描画点の半径)
/sw 0 def % 始点の開始
0 0 240 240 rectfill 背景を黒で描く

120 120 translate   % 座標の原点を中央に移動
newpath % パスの初期化
0 .5 360 { % 0から360まで0.5づつ増分し{ }内を繰り返す
    /a exch def  % 制御変数をa(回転角)に入れる
    % スピログラフの数式
    /x rc rm sub a cos mul rd rc rm sub rm div a mul cos mul add def
    /y rc rm sub a sin mul rd rc rm sub rm div a mul sin mul sub def
    % swが0なら始点をさもなくば線を引く
    sw 0 eq { x y moveto /sw 1 def } { x y lineto } ifelse
} for
closepath % 線を繋ぐ
gsave % グラフィックス状態を保存
1 0 1 setrgbcolor fill % マゼンタ色で塗りつぶす
grestore % グラフィックス状態を復元
1 setlinewidth % 線幅1ポイント
1 .7 0 setrgbcolor stroke % オレンジ色の線描く
やってみよう 3っつのパラメータと増分値を変えると様々なパターンが現われます。