ここでは、書籍「アートで魅せる数学の世界」のp.139の図3.41に示してある、リチュース螺旋を再現してみました。

リチュース螺旋

今回再現してみたリチュース螺旋は以下のような図形になります。

M=40,N=1のリチュース螺旋

リチュース螺旋の式

リチュース螺旋の式は、 x(t) = \frac{a}{\sqrt{\theta}} \cos \theta, \ \ y(t) = \frac{a}{\sqrt{\theta}} \sin \theta で表されます。今回も糸掛けバージョンのように、 \theta \to 2 \pi i N / M と置き換えて x_i = a \sqrt{\frac{ M }{2 \pi i N}} \cos ( 2 \pi i N / M ), \ \ y_i = a \sqrt{\frac{ M }{2 \pi i N}} \sin ( 2 \pi i N / M ) \ \ ( i=1,2, \cdots, P) として(x_i,y_i)を計算し、順にそれらの座標点を線分で結んでいくことでリチュース螺旋を描いています。ただし、i=0のときは計算できませんので、点列から外しています。

なお、今回は M=40, \ \ N=1, \ \ P=1000 として描いています。Nの値を変えて糸掛けバージョンを試みてみましたが、リチュース螺旋では特に面白い図形は得られないようです。

ソースコード

リチュース螺旋のプログラムのソースコードを示しておきます。

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

  // リチュース螺旋を描画
  stroke(255,0,0);
  drawLituusSpiral(250.0, 1.0, 40.0, 1000); 
}

// リチュース螺旋を描く関数
void drawLituusSpiral(
  float a, // 円の半径の初期値
  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 = a / sqrt(theta) * cos( theta );
    y = a / sqrt(theta) * sin( theta );
    vertex(x,y);
  }
  endShape();
}