Koch曲線とその構成方法

長さ \(l\) の線分( \(0\) 次Koch曲線)を与える.

この線分を \(3\) 等分し,中央の長さ \(\dfrac{l}{3}\) の線分を,それを底辺とする正三角形の残りの \(2\) 辺で置き換える. すると,長さが \(\dfrac{l}{3}\) である \(4\) 本の線分からなる折れ線( \(1\) 次Koch曲線)ができる.

次に,\(1\) 次Koch曲線の \(4\) 本の線分それぞれを, \(1\) 次Koch曲線と同様の手順で作った折れ線で置き換えれば, \(4^2\) 本の線分からなる折れ線( \(2\) 次Koch曲線)ができる.

  \(\vdots\)

この操作を,\(n\) 回繰り返して作られる\(4^n\) 本の線分からなる折れ線が \(n\) 次Koch曲線であり,\(n \to \infty\) とした極限によって得られる曲線が Koch曲線 である.

Koch曲線は,部分の中に全体を縮小した構造がそのまま観察されるFractal図形(自己相似図形)であり,いかなる微小部分の長さも無限大であり,いたるところ微分不可能である.

プログラム

まず,\(n\) 次のKoch曲線を描く関数“Koch(n,x,y,t,l,j)”を定義する. これをもとに,正三角形の各辺をKoch曲線にするプログラミングを作り,この図形を \(n\) 次まで並べて出力する関数“TriangleKoch(n)”を定義する.

################################################################################
# Hou to Use
# 正数nに対して,TriangleKoch(n)とすれば,
# 正三角形の角辺が0,1,2,...,n次のKoch曲線であるような図形が順に得られる.
# 新たに図を描くときは,plot.new()により,図を消去する.
################################################################################
Koch <- function(n,x,y,t,l){
          # n:次数
          # x,y:座標
          # t:回転角
          # l:長さ
          # j:定義域調整
  if(n > 0){
    # Step0
      n <- n-1
      l <- l/3
    # Step1
      Koch(n,x,y,t,l)
    # Step2
      x <- x+l*cos(t)
      y <- y+l*sin(t)
      t <- t+pi/3
      Koch(n,x,y,t,l)
    # Step3
      x <- x+l*cos(t)
      y <- y+l*sin(t)
      t <- t-2*pi/3
      Koch(n,x,y,t,l)
    # Step4
      x <- x+l*cos(t)
      y <- y+l*sin(t)
      t <- t+pi/3
      Koch(n,x,y,t,l)
  }
  else{
    plot(
      c(x,x+l*cos(t)), c(y,y+l*sin(t)),
      type="l", # type="l":線のplot(点と点を結ぶ)
      xlim=c(0,3), # 定義域はjに依存させる
      ylim=c(-1,1),
      ann=F, # 軸のラベルを表示しない
      axes=F, # 軸を表示しない
      asp=1 # 軸の比率は1
    )
    par(new=T) # 既存のグラフに重ね書き
  }
}
TriangleKoch <- function(n){
  r <- sqrt(3)
    for(i in 0:2){ # i:三角形の周に沿ってKoch曲線を描く
      t <- 2*i*pi/3
      Koch(n,1+cos(-t),sin(-t),7*pi/6+2*t,r)
      # x座標は図形の中心になる
    }
}

ここでは,TriangleKoch(n)をいくつか出力しておこう.

TriangleKoch(0)

TriangleKoch(2)

TriangleKoch(4)

TriangleKoch(6)

Koch曲線の説明に関する参考文献

  • 俣野博『微分と積分3』岩波書店(1999)
  • 青本和彦,上野健爾,加藤和也,他6名『岩波 数学入門辞典』岩波書店(2005)