ここでは、書籍「アートで魅せる数学の世界」のp.143の図3.48右図に示してある、ハイポサイクロイドの糸掛けバージョンを再現してみました。

ハイポサイクロイド×糸掛け

今回再現してみたハイポサイクロイドの糸掛けバージョンは以下のような図形になります。

M=100, N=53, R=240, r=80の糸掛けバージョンでのハイポサイクロイド

ハイポサイクロイドとは

ハイポサイクロイドとは、半径\(R\)の大きな円の内周を半径\(r\)の小さな円が滑らずに転がっていくときに、小さな円の一点が描く軌跡のことを言います。

ハイポサイクロイドの概念図

ハイポサイクロイドの式

ハイポサイクロイドの式は、\[ x = (R-r) \cos \theta + r \cos \left( \frac{R-r}{r} \theta \right), \ \ y = (R-r) \sin \theta – r \sin \left( \frac{R-r}{r} \theta \right) \]で表されます。今回は糸掛けバージョンとなりますので、\( \theta \to 2 \pi i N / M \)と置き換えて、\[ x_i = (R-r) \cos \frac{2 \pi i N}{M} + r \cos \left( \frac{R-r}{r} \frac{2 \pi i N}{M} \right), \ \ y_i = (R-r) \sin \frac{2 \pi i N}{M} – r \sin \left( \frac{R-r}{r} \frac{2 \pi i N}{M} \right) \ \ ( i=0,1,2, \cdots, P) \]として\((x_i,y_i)\)を計算し、順にそれらの座標点を線分で結んでいくことでハイポサイクロイドの糸掛けバージョンを描くことができます。

上記のハイポサイクロイドの糸掛けバージョンは\( M=100, \ \ N=53, \ \ R=240, \ \ r=80 \)として描いています。

また、\( M=500, \ \ N=197, \ \ R=250, \ \ r=50 \)とすると、書籍「アートで魅せる数学の世界」のp.147の図3.54右図のハイポサイクロイドの糸掛けバージョンが得られます。

M=500, N=197, R=250, r=50の糸掛けバージョンでのハイポサイクロイド

ソースコード

ハイポサイクロイドの糸掛けバージョンのプログラムのソースコードを示しておきます。

void setup(){
  size(500,500);
  background(255,255,255);
  translate(width/2.0, height/2.0);
  noFill();

  // ハイポサイクロイドを描画
  stroke(0,0,255);
  drawHypocycloid(240.0, 80.0, 53.0, 100.0, 1000); 
}

// ハイポサイクロイドを描く関数
void drawHypocycloid(
  float R, // 大きい円の半径
  float r, // 小さい円の半径
  float N, // 糸掛係数
  float M, // 周期
  int P // データ数
){   
  float x, y, theta; 
  beginShape();
  for(int i=1; i<=P; i++){
    theta = 2.0 * PI * i * N / M;
    x = (R-r) * cos( theta ) + r * cos( (R-r)/r * theta );
    y = (R-r) * sin( theta ) - r * sin( (R-r)/r * theta );
    vertex(x,y);
  }
  endShape();
}