ここでは、書籍「アートで魅せる数学の世界」のp.139の図3.41に示してある、リチュース螺旋を再現してみました。
Contents [非表示]
リチュース螺旋
今回再現してみたリチュース螺旋は以下のような図形になります。

リチュース螺旋の式
リチュース螺旋の式は、 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();
}