---
title: "Koch curve"
author: "Yamane"
date: "2015年11月04日"
output: html_document
---




##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)"を定義する．




```{r}
################################################################################
# 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)をいくつか出力しておこう．


```{r}
TriangleKoch(0)
```
```{r}
TriangleKoch(2)
```
```{r}
TriangleKoch(4)
```
```{r}
TriangleKoch(6)
```




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

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