裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

コッホ曲線

2010年09月01日 | ブログラミング

これも,以前書いたもの

drawKoch <- function(a.x, a.y, b.x, b.y, n)
{
    c.x <- (2*a.x+b.x)/3
    c.y <- (2*a.y+b.y)/3
    d.x <- (a.x+2*b.x)/3
    d.y <- (a.y+2*b.y)/3
    x <- b.x-a.x
    y <- a.y-b.y
    d <- sqrt(x^2+y^2)/sqrt(3)
    if (x >= 0) {
        a1 <- atan(y/x)+pi/6
        e.x <- a.x+d*cos(a1)
        e.y <- a.y-d*sin(a1)
    }
    else {
        a2 <- atan(y/x)-pi/6
        e.x <- b.x+d*cos(a2)
        e.y <- b.y-d*sin(a2)
    }
    if (n <= 0) {
        lines(c(a.x, c.x, e.x, d.x, b.x), c(a.y, c.y, e.y, d.y, b.y), col="red")
    }
    else {
        drawKoch(a.x, a.y, c.x, c.y, n-1)
        drawKoch(c.x, c.y, e.x, e.y, n-1)
        drawKoch(e.x, e.y, d.x, d.y, n-1)
        drawKoch(d.x, d.y, b.x, b.y, n-1)
    }
}
plot(c(50, 450), c(70, 428), type="n", axes=FALSE, xlab="", ylab="", asp=1)
r <- 180
ox <- oy <- 250
p.x <- r*cos(pi*(3/6))+ox
p.y <- r*sin(pi*(3/6))+oy
q.x <- r*cos(pi*(7/6))+ox
q.y <- r*sin(pi*(7/6))+oy
r.x <- r*cos(pi*(11/6))+ox
r.y <- r*sin(pi*(11/6))+oy
n <- 7
drawKoch(p.x, p.y, q.x, q.y, n)
drawKoch(q.x, q.y, r.x, r.y, n)
drawKoch(r.x, r.y, p.x, p.y, n)
grid(40)
points(c(p.x, q.x, r.x), c(p.y, q.y, r.y))

描画結果

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ドラゴン曲線 | トップ | フラクタルの例として木 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事