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

エピサイクロイド×糸掛け

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

M=100, N=37, R=150, r=25の糸掛けバージョンでのエピサイクロイド

エピサイクロイドとは

エピサイクロイドとは、半径\(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=37, \ \ R=150, \ \ r=25 \)として描いています。

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

M=500, N=307, R=175, r=25の糸掛けバージョンでのエピサイクロイド

ソースコード

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

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

  // エピサイクロイドを描画
  stroke(0,255,0);
  drawEpicycloid(150.0, 25.0, 37.0, 100.0, 1000); 
}

// エピサイクロイドを描く関数
void drawEpicycloid(
  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();
}