再帰図形
点は2つですが、(1,0)にもう一つ点があるものと考えると、面白いことがわかります。とりあえず2回目をやってみましょう。
ここで、「相似な図形がある」ことに気がつくでしょうか。
1回目の図で、(1,0)に点があるものとすると、3点で二等辺三角形ができています。
2回目の図では、それを縮小した図形がありますね。z200とz201を底辺とする二等辺三角形と、z201と1を底辺とする二等辺三角形です。
はじめの4つは、2回目までに描かれたのと同じ点です。図では緑色の点です。
あとの4つが新たにできた点です。図では赤色の点です。
緑色の点を順に結んだ線分をそれぞれ底辺とし、赤の点を第3の頂点とする二等辺三角形は、1回目、2回目でできた二等辺三角形と相似であることがわかりますか。
4回目です。計算は量が増えるので示しません。点の個数は16個で、いままでと同様、そのうちの8個は3回目までにできた点と同じで、8個が新たにできた点です。次の図で黄色の点です。
さて、点が増えましたが、今まで通り、二等辺三角形が続けてできていることがわかるでしょうか。
2回目と4回目の図について、それぞれ線分で結んでみましょう。
1回目にできた二等辺三角形ではなく、2回目にできた折れ線を基準に考えることもできます。すると、4回目にできた図形は、2回目の図形の4つの辺それぞれを、全体を縮小した図形で置き換えていることがわかります。
このような図形を、「全体と一部が相似」な図形ということで、「自己相似形」といいます。自己相似形な図形で最も有名なのがコッホ曲線です。この図はまさにコッホ曲線です。
なお、このような図形はタートルグラフィクスを用いて描くこともできます。
「CinderellaでL-System」のページをごらんください。
タートルグラフィクスでは、タートル(亀)が線を引きながら動いて図形を描きます。
今やっている、複素関数(複素数の関数)による反復では点をとっていくだけで線分は引かれません。
それでも、点が増えればほとんど同じ図ができます。
次の図は、点の大きさを小さくして、9回繰り返した図です。
さて、コッホ曲線ができる様子を、現象としては理解できたでしょうか。しかし、「なぜ」そうなるのでしょう。
ここをさらに考えます。
これをCinderellaを使って確かめます。
まず3点A,B,Cをとります。点Aがz、点Bはこの関数で点Aが写る点、点Cはzの共役複素数としましょう。スクリプトメニューからCindyScriptを開いて、次のスクリプトを書きます。また、回転、拡大縮小の様子がわかりやすいように、各点と原点を結んだ線分を表示しておきます。
f0(z):=(1/2+sqrt(3)/6*i)*conjugate(z);
z=complex(A);
z1=f0(z);
B.xy=gauss(z1);
C.xy=gauss(conjugate(z));
drawtext(A.xy+[0.3,0.1],":"+z);
drawtext(B.xy+[0.3,0.1],":"+z1);
実行すると次のようになります。
Cは実軸に関して点Aと対称な位置にあります。点Bは点Cを回転・縮小した位置にあります。点Aをドラッグしてみるとその関係がよくわかります。
コッホ曲線では、三角AOBが二等辺三角形になりましたが、それは点Aが特殊な(ある条件を満たす)位置にあるからなので、一般には二等辺三角形にはなりません。それがどのような場合かは、点Aを動かしてみるとわかるでしょう。
次にf1(z) です。同じように考えると、点Aを実軸に関して対称移動し、それを-1だけ平行移動し、回転と拡大縮小を行い、最後に1だけ平行移動することになります。
点Dを追加し、スクリプトを書き直します。
f1(z):=(1/2-sqrt(3)/6*i)*(conjugate(z)-1)+1;
z=complex(A);
z1=f1(z);
B.xy=gauss(z1);
C.xy=gauss(conjugate(z)-1);
D.xy=gauss(z1-1);
drawtext(A.xy+[0.3,0.1],":"+z);
drawtext(B.xy+[0.3,0.1],":"+z1);
まず、点Cは、点Aを実軸に関して対称移動し、それを-1だけ平行移動した点になります。DはCを回転・縮小した点です。最後に、BがDを1だけ平行移動した点、すなわちです。点Aを動かしてみると、点CとDの関係がよくわかるでしょう。
では、「1だけ平行移動する」というのにはどのような意味があるのでしょうか。それをわかりやすくするために2つの図をつくってみます。ひとつは、平行移動をしないで、回転と縮小だけをしたもので、点Aは格子点に置きます。もうひとつは、点Aを1だけずらした点に置いた図です。この2つの図で、点AとBの位置関係は同じであることがわかるでしょうか。
すなわち、f1(z) は、点(1,0) (複素数平面では1が表す点) を中心として回転・拡大縮小をおこなっているのです。
さらに、このことをはっきりさせるために、点E(1) をとって、Cは実軸に関するAの対称点とし、EとA,B,Cの各点と結び、点Aを動かしてみましょう。点CとBの関係がよくわかります。
以下、これを繰り返します。
さて、f0(z) が原点を中心とした移動、f1(z)が1に関する移動であることがわかったので、ひとつ実験をしてみましょう。
1回目の移動(変換)で、z11が作られ、以後はこの点から次々に点ができていくのでした。
では、最初の点z0を0でなく1から始めるとどうなるでしょう。
1回目にf0(1) はz11と同じ点になり、f1(1) は1のままです。ということは、そのあとは、最初の点が0デあること以外はまったく同じになるはずです。
実際、z1=1 としてやってみると、同じ図が描かれます。唯一、0がなくて1があるだけです。
コッホ曲線の場合に、2つの関数の働きがわかったところで、一般的な関数の式に戻りましょう。
いまとなれば、それぞれの関数が、点zをどのように移動させるかがわかるでしょう。
f0(z) はzにaをかけたものと、zの共役複素数にbをかけたものの和です。a,bをかけると、回転と拡大・縮小が行われます。これが原点を中心に行われます。
f1(z)はzにcをかけたものと、zの共役複素数にdをかけたものの和です。c,dをかけると、回転と拡大・縮小が行われますが、今度は原点ではなく、点1を中心に行われるのです。
この2つを繰り返すことによって、自己相似形な図形を描いていくのです。
さて、関数の意味がわかりました。そこで、4つの点で係数a,b,c,dを決めて、簡単にフラクタルを描画するものを作りました。
YouTubeに掲載しました。
< 戻る >