ここでは、書籍「アートで魅せる数学の世界」のp.154に示してある、ハイポトロコイドとリサージュ曲線を合わせたものの糸掛けバージョンを再現してみました。
ハイポトロコイド×リサージュ曲線×糸掛け
今回再現してみたハイポトロコイドとリサージュ曲線を合わせたものの糸掛けバージョンは以下のような図形になります。
ハイポトロコイド×リサージュ曲線の式
今回のハイポトロコイド×リサージュ曲線の式は、ハイポトロコイドの式の右辺の第1項に周波数を導入することで表すことができます。つまり、\[ x = (R-r) \cos a \theta + \frac{r}{d} \cos \left( \frac{R-r}{r} \theta \right), \ \ y = (R-r) \sin b \theta – \frac{r}{d} \sin \left( \frac{R-r}{r} \theta \right) \]で表されます。今回は糸掛けバージョンとなりますので、\( \theta \to 2 \pi i N / M \)と置き換えて、\[ x_i = (R-r) \cos \frac{2 \pi a i N}{M} + \frac{r}{d} \cos \left( \frac{R-r}{r} \frac{2 \pi i N}{M} \right), \ \ y_i = (R-r) \sin \frac{2 \pi b i N}{M} – \frac{r}{d} \sin \left( \frac{R-r}{r} \frac{2 \pi i N}{M} \right) \ \ ( i=0,1,2, \cdots, P) \]として\((x_i,y_i)\)を計算し、順にそれらの座標点を線分で結んでいくことでハイポトロコイド×リサージュ曲線の糸掛けバージョンを描くことができます。
ソースコード
ハイポトロコイド×リサージュ曲線の糸掛けバージョンのプログラムのソースコードを示しておきます。
void setup(){
size(500,500);
translate(width/2.0, height/2.0);
noFill();
// ハイポトロコイド×リサージュ曲線を描画
background(255,255,255);
stroke(0,0,0);
strokeWeight(0.1);
drawHypotrochoid_Lissajous(144.0*1.5, 67.0*1.5, 3.0, 2.0, 2.0, 1.0, 100.0, 10000);
}
// ハイポトロコイド×リサージュ曲線を描く関数
void drawHypotrochoid_Lissajous(
float R, // 大きい円の半径
float r, // 小さい円の半径
float a, // x軸方向の周波数
float b, // y軸方向の周波数
float d, // 点の位置(小さい円の半径との比)
float N, // 糸掛係数
float M, // 周期
int P // データ数
){
float x, y, theta;
beginShape();
for(int i=0; i<=P; i++){
theta = 2.0 * PI * i * N / M;
x = (R-r) * cos( a * theta ) + (r/d) * cos( (R-r)/r * theta );
y = (R-r) * sin( b * theta ) - (r/d) * sin( (R-r)/r * theta );
vertex(x,y);
}
endShape();
}