- 前の記事で、分割数は進体と関係していて、それはフラクタルにつながるということを書いた
- また「複素進法」というものも定義できることが分かった
- これらから得られる「進法」の意味とは、次のようになる
- ユニットがある(n進法なら1、複素進法なら複素数)
- ユニットのべきがある
- べきに関して再帰処理をする
- 「進法」というものが何なのかを考えるためにもう少し整理する
- 通常のn進法では、とあらわして、は自然数であるとか、であるとかの制約を入れている。また、数直線上の値を表現するという(暗黙の)了解もある
- 複素進法では、数直線上の値ではなくて、複素平面上の値を表現している
- じゃあ、ということで、2方向に考えを広げられそうだ(3方向か?)
- (1) 数直線上の展開(普通の進法)で「再帰性(フラクタル的)」な扱いをして、それを「フラクタル的絵」にすることができるか
- (2) 次元を3以上に上げるとすればどうするか(そもそも、整数次元でないのがフラクタルの良さだから、対応する空間ももっと自由にすることもできそうだ)
- (3) これは、どう拡張したらよいのか白紙だが、「ユニット(今は1とか)」を自由にして、「係数(今は0以上の整数とか)」も自由にする
- Rでやってみる
- 無限数直線(とりあえず0からまで)を有限範囲に納まる折れ線にする。それは再帰性のある折れ線
- aとbとの2点について
- n進でt-th 点の座標を返す
- 2次元平面上の2点の座標a,b
- n進法で、ある位の値がt = 0,1,...(n-1)とする
- a,b2点を乗せた円であって、その2点を通る半径が直交するものとする
- そのうえで、その四半円をn等分した円周上の点をtの値に応じて対応づける
- 複数の位の数字があるので、この四半円化処理を位ごとに再帰的に細かくしていく
my.k.shin <- function(a,b,n,t){
center <- (a+b)/2
a.c <- a-center
a.c2 <- matrix(c(0,1,-1,0),byrow=TRUE,2,2) %*% a.c
center <- center + a.c2
a.c <- a-center
theta <- t*pi/(n*2)
theta2 <- (t+1)*pi/(n*2)
m <- matrix(c(cos(theta),-sin(theta),sin(theta),cos(theta)),byrow=TRUE,2,2)
m2 <- matrix(c(cos(theta2),-sin(theta2),sin(theta2),cos(theta2)),byrow=TRUE,2,2)
incl <- m %*% a.c
incl2 <- m2 %*% a.c
return(list(a=center + incl, b = center + incl2))
}
my.k.shin2 <- function(x,n){
A <- c(1,0)
B <- c(0,0)
tmp <- my.k.shin(A,B,n,x[1])
for(i in 2:length(x)){
tmp <- my.k.shin(tmp$a,tmp$b,n,x[i])
}
tmp
}
k <- 7
n <- 2
d <- 10000
r <- matrix(sample(0:(n-1), k*d, replace=TRUE),ncol=k)
X <- matrix(0,d,4)
for(i in 1:d){
tmp <- my.k.shin2(r[i,],n)
X[i,] <- c(tmp$a,tmp$b)
}
tmpX <- t(r) * n^(k:1)
v <- apply(tmpX,2,sum)
ord <- order(v)
xlim <- ylim <- range(X)
plot((X[,1]+X[,3])/2,(X[,2]+X[,4])/2,xlim = xlim, ylim = ylim)
plot(c(X[ord,1],X[ord,3]),c(X[ord,2],X[ord,4]),xlim = xlim, ylim = ylim,type="l")