線でつなぐ

KABIRA2010-11-08

  • こちらの記事を参考に
  • Rで図の上に線を書く
  • 線が書けるということでフラクタルな樹を書いてみた
    • #コメントのあるところの数字をかえると形がかわる
a<-c(0,0)
b<-c(0,1)

s<-pi/4    #右の枝の角度
t<--pi/4*0.6  #左の枝の角度

r<-0.8    #右の枝の長さ
l<-0.7     #左の枝の長さ

Rt<-matrix(c(cos(t),sin(t),-sin(t),cos(t)),2)
Rs<-matrix(c(cos(s),sin(s),-sin(s),cos(s)),2)

f<-function(a,b){
	bl<-b+l*Rs%*%(b-a)
	br<-b+r*Rt%*%(b-a)
	v<-cbind(bl,br)
	return(v)
	}

U<-cbind(c(),a)
V<-cbind(c(),b)
m<-cbind(U,V)
N<-8     #分岐の回数+1
W<-c()
while(ncol(m)<2^N){
for (i in 1:ncol(V)){
	W<-cbind(W,f(U[,floor((i+1)/2)],V[,i]))
	}
	U<-V
	V<-W
	m<-cbind(m,W)
	W<-c()
	}
plot(t(m))
for (j in 1:(ncol(m)/2)){
	segments(m[1,j],m[2,j],m[1,2*j],m[2,2*j])
	segments(m[1,j],m[2,j],m[1,2*j-1],m[2,2*j-1])
	}
  • 分岐ごとに枝の色をかえるときは
for (j in 1:(ncol(m)/2)){
	segments(m[1,j],m[2,j],m[1,2*j],m[2,2*j],log(j-0.1,2)+2)
	segments(m[1,j],m[2,j],m[1,2*j-1],m[2,2*j-1],log(j-0.1,2)+2)
	}