シェルピンスキー

KABIRA2011-02-08

  • 本でシェルピンスキーのギャスケットのことが書いてあったのでRで書いてみた
  • 確率的な書き方をしている
  • ルール(正三角形について)
    • 正三角形ABCをとる
    • ΔABC内に点Pをとる
    • Pを以下のように移動させる
    • サイコロをふって
      • 1 or 2 なら A と P の中点に移動する
      • 3 or 4 なら B と P の中点に移動する
      • 5 or 6 なら C と P の中点に移動する
  • これをN角形にしてみた
    • 初期位置はギャスケットから離れている
    • 移動するごとに誤差も小さくなっているようだ
N<-3
M<-1000   #プロットする点の数


#正N角形を作る
#A<-matrix(0,2,N)
#k<-1:N
#theta<-2*pi/N*k
#for(i in 1:N){
#A[,i]<-c(cos(theta[i]),sin(theta[i]))
#}

#任意のN角形を作る
A<-matrix(runif(2*N),2,N)

par(new="FALSE")
plot(t(A),xlim=c(min(A[1,]),max(A[1,])),ylim=c(min(A[2,]),max(A[2,])),cex=0.5)

#最初のP
#library(MCMCpack)
#P<-apply(A,1,"%*%",t(rdirichlet(1,rep(1,N))))
P<-runif(2)

for(t in 1:M){
i<-sample(1:N,1)
P<-(P+A[,i])/2
par(new="TRUE")
plot(t(P),xlim=c(min(A[1,]),max(A[1,])),ylim=c(min(A[2,]),max(A[2,])),cex=0.5)
}
  • N=4にしてプロットしてみる
    • 3次元空間内のこちらを平面に投射したものになる
    • 正方形では全面にプロットされてしまうので、形が見えない