再帰図形

点は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に掲載しました。

< 戻る >