- 正方形のタイルで平面を埋め尽くすのはタイリングの一種
- 正三角形のタイルで平面を埋め尽くすのもタイリングの一種
- 正三角形は正単体の一つ
- 正単体での埋め尽くし・タイリングとは?
- 頂点数2の正単体が1次元空間でタンデムに並んでいるのは、1次元空間の1正単体による埋め尽くし
- 頂点数3の正単体(正三角形)が2次元空間でタイリングしていれば、2次元空間の2正単体による埋め尽くし
- 頂点数4の正単体(正四面体)が3次元空間で並びつくせば、3次元空間の3正単体による埋め尽くし
- 頂点数nの正単体がn-1次元空間で並びつくせば、n-1次元空間のn-1正単体による埋め尽くし
- 埋め尽くしが部分的であれば、辺縁が生じる
- 並んだタイルの辺縁は「多次元折れ線(折れ面)の角」に当たる頂点を列挙すれば決まる(包の頂点)
- 1次元の場合は、両端
- 2次元の場合は2次元面上の多角形の頂点
- 辺縁決定頂点を列挙すれば決まるのであれば、それ以外の点は「ないものとして省略」できる
- こうすれば、複体の省略表現ができる
- 必要な情報は、k次元超多角形をその次元と頂点集合とで列挙すること
- など
- この情報から、k次元超次元多角形同士の隣接状態は復元できる(復元できないようなら、復元できるように記法を工夫する)
- 二次元三角形タイル敷き詰めから、中抜きをしてみる処理の試作品
library(igraph)
n <- 8
m <- matrix(sample(0:1,n^2,replace=TRUE),n,n)
m <- sign(m+t(m))
diag(m) <- 0
m[upper.tri(m)] <- 0
m <- matrix(0,n,n)
for(i in 1:(n-1)){
m[i,i+1] <-m[i+1,i] <-1
}
k <- 5
n <- sum(1:k)
m <- matrix(0,n,n)
for(i in 2:k){
tmp <- (sum(1:(i-1)) + 1):sum(1:i)
for(j in 1:length(tmp)){
target <- c(tmp[j]-(i-1)-1,tmp[j]-(i-1))
if(j ==length(tmp)){
target <- target[1]
}else if(j==1){
target <- target[2]
}
if(j>1){
target <- c(target,tmp[j]-1)
}
m[tmp[j],target] <- 1
}
}
m <- sign(m+t(m))
m.ori <- m
g.ori <- graph.adjacency(m.ori,mode="undirected")
plot(g.ori)
todo <- rep(1,n)
max.iter <- 100
cnt.iter <- 1
m.list <- list()
m.list[[1]] <- m.ori
while(sum(todo)>0 & cnt.iter < max.iter){
current.m <- m.list[[cnt.iter]]
cnt.iter <- cnt.iter + 1
s <- sample(which(todo==1))
for(i in 1:length(s)){
es <- which(m[s[i],]==1)
n.e = length(es)
if(n.e < 2){
todo[s[i]] <- 0
}else{
n.max <- (1+sqrt(1+8*n.e))/2
ok.n.e <- seq(from=2,to=n.max,by=1)
this <- which(ok.n.e*(ok.n.e-1) == n.e)
print(n.max)
print(ok.n.e)
print(n.e)
print(this)
if(length(this)>0){
print("potential")
tmp.m <- m.list[[cnt.iter-1]][es,es]
tmp.m <- sign(tmp.m+t(tmp.m))
print(tmp.m)
n.e.each <- apply(tmp.m,1,sum)
if(all(n.e.each == 2*(this+1-2))){
if(n.e>2){
current.m[s[i],] <- current.m[,s[i]] <- 0
todo[s[i]] <- 0
}
}
}
}
}
m.list[[cnt.iter]] <- current.m
}
g <- graph.adjacency(m.list[[2]],mode="undirected")
par(mfcol=c(1,2))
plot(g.ori)
plot(g)