コッホ曲線

提供: testwiki
ナビゲーションに移動 検索に移動

コッホ曲線(コッホきょくせん、テンプレート:Lang-en-short)はフラクタル図形の一つ。スウェーデンの数学者ヘルゲ・フォン・コッホ (Helge von Koch) が考案したテンプレート:Sfn線分を3等分し、分割した2点を頂点とする正三角形の作図を無限に繰り返すことによって得られる図形である。1回の操作で線分の長さが テンプレート:Math 倍になるので、操作を無限に繰り返して得られるコッホ曲線の長さは無限大であるテンプレート:Sfn高木曲線などと同様に、連続でありながら至るところで微分不可能な曲線であるテンプレート:Sfn

コッホ曲線は相似比が テンプレート:Math の4個のセグメントから成っているので、フラクタル次元(相似次元)は、テンプレート:Math を底とする テンプレート:Math の対数(テンプレート:Mathを必ずしも自然対数である必要はない任意の対数として、テンプレート:Math次元)である[1]。(テンプレート:OEIS2C)

コッホ曲線の作成手順

  1. 線分を引く。(ステップ0、図左上)
  2. 線分を3等分し、中央の線分を1辺とする正三角形を描き、下の辺を消す。(ステップ1、図右上)
  3. 得られた4の線分に対して同じ操作を繰り返す。(ステップ2、図左下)
  4. 得られた16の線分に対して同じ操作を繰り返す。(ステップ3、図右下)

この操作を無限に繰り返すとコッホ曲線になる。以下はステップ6まで行ったときの図形である。

ステップ6時点での図形
ステップ6時点での図形

コッホ雪片

ステップ6までを示すアニメーション。

コッホ雪片(コッホせっぺん、テンプレート:Lang-en-short)は、上記のコッホ曲線を3つ繋ぎ合わせ、始点と終点を一致させたものであるテンプレート:Sfnコッホ島などとも呼ぶテンプレート:Sfn

コッホ曲線は無限の長さを持つので、同様にコッホ雪片の周長も無限の長さを持つ。一方で、コッホ雪片の曲線で囲まれた面積は有限に留まる。最初の正三角形の面積を テンプレート:Math とするとコッホ雪片の面積は テンプレート:Math に収束するテンプレート:Sfn

コンピュータによる生成

コッホ曲線は、アフィン変換を使用することで得られ、

f(x,y)=[abcd][xy]+[ef]

以下の4つの反復関数系(IFS)で表わされる[2]

f1(x,y)=[ 13 0 0 13][ xy]
f2(x,y)=[ 16 36 36 16][ xy]+[ 130]
f3(x,y)=[ 16 36 36 16][ xy]+[ 1236]
f4(x,y)=[ 13 0 0 13][ xy]+[ 230]

反復関数 テンプレート:Math は、テンプレート:Math の式で展開できるので、計算式は以下のように表される。

テンプレート:Math

テンプレート:Math
テンプレート:Math

テンプレート:Math

テンプレート:Math
テンプレート:Math

テンプレート:Math

テンプレート:Math
テンプレート:Math

テンプレート:Math

テンプレート:Math
テンプレート:Math

これらの反復関数を各種プログラム言語(C, Python, Basicなど)でプログラミングし、順次反復計算させ、コッホ曲線を描画させることが可能である[3]

また、下表のように各反復関数の確率因子を設定[4]しておき、コンピューターで乱数を発生させ、確率因子pに応じた乱数範囲で用いる関数を決定し、計算を反復的に実行することでも、コッホ曲線を描画させることができる。これはランダム・アルゴリズムと呼ばれる手法である[5][6]

w a b c d e f p 変換内容
ƒ1 1/3 0 0 1/3 0 0 0.25 1/3にスケーリング
ƒ2 1/6 -√3/6 √3/6 1/6 1/3 0 0.25 1/3にスケーリング、60°回転
ƒ3 1/6 √3/6 -√3/6 1/6 1/2 √3/6 0.25 1/3にスケーリング、-60°回転
ƒ4 1/3 0 0 1/3 2/3 0 0.25 1/3にスケーリング

以下のように表計算ソフトの関数を利用することでも同様の計算を実行できる。

表計算ソフトで作成したコッホ曲線、1万のXYデータの散布図
A B C D E F G H
1 w a b c d e f p
2 ƒ1 0.3333 0 0 0.3333 0 0 0.25
3 ƒ2 0.1667 -0.2887 0.2887 0.1667 0.3333 0 0.25
4 ƒ3 0.1667 0.2887 -0.2887 0.1667 0.5 0.2887 0.25
5 ƒ4 0.3333 0 0 0.3333 0.6667 0 0.25
6 random ƒ X Y
7 0 0 ←initial
8 =RAND() B8 C8 D8 ←data

なお、B8,C8,D8のセルには以下のような複数条件判定の関数(ネスティング参照)を入力する。

  • B8=IF(A8<($H$2),1,IF(A8<($H$2+$H$3),2,IF(A8<($H$2+$H$3+$H$4),3,4)))
  • C8=IF(B8=1,$B$2*C7+$C$2*D7+$F$2,IF(B8=2,$B$3*C7+$C$3*D7+$F$3,IF(B8=3,$B$4*C7+$C$4*D7+$F$4,$B$5*C7+$C$5*D7+$F$5)))
  • D8=IF(B8=1,$D$2*C7+$E$2*D7+$G$2,IF(B8=2,$D$3*C7+$E$3*D7+$G$3,IF(B8=3,$D$4*C7+$E$4*D7+$G$4,$D$5*C7+$E$5*D7+$G$5)))

最終8行目をオートフィルで適当な行数だけコピーし、XY散布図とするとコッホ曲線が得られる。

脚注

テンプレート:脚注ヘルプ テンプレート:Reflist

参考文献

関連項目

外部リンク

テンプレート:Commons テンプレート:Commons

テンプレート:Fractals