ここでは、書籍「アートで魅せる数学の世界」のp.151の図3.62、およびp.152の図3.64に示してある、リサージュ曲線の糸掛けバージョンを再現してみました。
Contents
リサージュ曲線×糸掛け
今回再現してみたリサージュ曲線の糸掛けバージョンは以下のような図形になります。
リサージュ曲線の式
リサージュ曲線については、記事「リサージュ図形」で詳しく紹介していますが、ここでは最もシンプルなリサージュ曲線となります。つまり\[ x = R \cos a \theta, \ \ y = R \sin b \theta \]で表されます。今回は糸掛けバージョンとなりますので、\( \theta \to 2 \pi i N / M \)と置き換えて\[ x_i = R \cos ( 2 \pi a i N / M ), \ \ y_i = R \sin ( 2 \pi b i N / M ) \ \ ( 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(255,0,0);
strokeWeight(0.5);
drawLissajous(200.0, 3.0, 2.0, 61.0, 500.0, 500);
}
// リサージュ曲線を描く関数
void drawLissajous(
float R, // 振幅
float a, // x軸方向の周波数
float b, // y軸方向の周波数
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 * cos( a * theta );
y = R * sin( b * theta );
vertex(x,y);
}
endShape();
}