コッホ曲線

線分を3等分し、分割した2点を頂点とする正三角形の作図を無限に繰り返すことによって得られる図形

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

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

コッホ曲線の作成手順 編集

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

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

 
ステップ6時点での図形

コッホ雪片 編集

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

コッホ雪片(コッホせっぺん、: Koch snowflake)は、上記のコッホ曲線を3つ繋ぎ合わせ、始点と終点を一致させたものである[5]コッホ島などとも呼ぶ[2]

コッホ曲線は無限の長さを持つので、同様にコッホ雪片の周長も無限の長さを持つ。一方で、コッホ雪片の曲線で囲まれた面積は有限に留まる。最初の正三角形の面積を 1 とするとコッホ雪片の面積は 1.6 に収束する[2]

コンピュータによる生成 編集

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

 

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

  • 1/3 でスケーリングする変換式
 
  • 1/3 でスケーリングし、60°回転させる変換式
 
  • 1/3 でスケーリングし、-60°回転させる変換式
 
  • 1/3 でスケーリングする変換式
 

反復関数 ƒ(xy) は、ax+by+e, cx+dy+f の式で展開できるので、計算式は以下のように表される。

ƒ1

x n + 1 = (1/3) x n
y n + 1 = (1/3) y n

ƒ2

x n + 1 = (1/6) x n −(√3/6) y n + 1/3
y n + 1 = (√3/6) x n + (1/6) y n

ƒ3

x n + 1 = (1/6) x n + (√3/6) y n + 1/2
y n + 1 = −(√3/6) x n  + (1/6) y n + (√3/6)

ƒ4

x n + 1 = (1/3) x n + 2/3
y n + 1 = (1/3) y n

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

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

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散布図とするとコッホ曲線が得られる。

脚注 編集

  1. ^ 井庭・福原 1998, p. 37.
  2. ^ a b c 本田 2013, p. 9.
  3. ^ 本田 2013, p. 8.
  4. ^ Steven H. Strogatz、田中久陽・中尾裕也・千葉逸人(訳)、2015、『ストロガッツ 非線形ダイナミクスとカオス―数学的基礎から物理・生物・化学・工学への応用まで』、丸善出版 ISBN 978-4-621-08580-6 p. 444
  5. ^ 井庭・福原 1998, p. 38.
  6. ^ Koch Curve”. larryriddle.agnesscott.org. 2020年2月18日閲覧。
  7. ^ Koch curve - Rosetta Code”. rosettacode.org. 2020年2月18日閲覧。
  8. ^ ifs”. cs.lmu.edu. 2020年2月18日閲覧。
  9. ^ p370,"8 Application to Computer Graphics", Fractals Everywhere, Boston, MA: Academic Press, 1993, ISBN 0-12-079062-9
  10. ^ Fractal Geometry”. www.math.union.edu. 2020年2月18日閲覧。

参考文献 編集

  • 本田勝也、2002(第8刷2013)、『フラクタル』初版第8刷、朝倉書店〈シリーズ 非線形科学入門1〉 ISBN 978-4-254-11611-3
  • 井庭崇・福原義久、1998(第19刷2013)、『複雑系入門―知のフロンティアへの冒険』初版第19刷、NTT出版 ISBN 4-87188-560-7

関連項目 編集

外部リンク 編集