1. ホーム
  2. ストリング・アート
  3. リサージュ曲線×糸掛け
  4. ハイポトロコイド×リサージュ曲線

ここでは、書籍「アートで魅せる数学の世界」のp.154に示してある、ハイポトロコイドとリサージュ曲線を合わせたものの糸掛けバージョンを再現してみました。

ハイポトロコイド×リサージュ曲線×糸掛け

今回再現してみたハイポトロコイドとリサージュ曲線を合わせたものの糸掛けバージョンは以下のような図形になります。

R=144, r=67, a=3, b=2, d=2, M=100, N=1のハイポトロコイド×リサージュ曲線
R=201, r=151, a=3, b=2, d=2, M=100, N=1のハイポトロコイド×リサージュ曲線
R=Φ, r=1, a=1, b=Φ, d=1, M=100, N=2のハイポトロコイド×リサージュ曲線(Φは黄金比)

ハイポトロコイド×リサージュ曲線の式

今回のハイポトロコイド×リサージュ曲線の式は、ハイポトロコイドの式の右辺の第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();
}