正三角形で覆われた穴のない立体

  • 多面体を考える
  • 凸多面体に限らないと列挙が終わらないので、凸多面体に限ることが多い
  • 以下では原則として凸多面体を扱いつつ、場合によっては凸ではない多面体も扱うことになる
  • 一番、制約がきついのは正多面体
    • 正多面体 regular polyhedron は、すべての頂点、面が等質
    • 正四面体 tetrahedron、正八面体octahedron、正二十面体 icosahedronの3種類
    • 三角形の頂点を反時計回りにたどることで、面数x3の行列としてあらわすことにする
tetra <- rbind(c(1,2,3),c(1,3,4),c(1,4,2),c(3,2,4))
octa <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,2),c(6,3,2),c(6,4,3),c(6,5,4),c(6,2,5))
icosa <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,6),c(1,6,2),c(3,2,7),c(4,3,8),c(5,4,9),c(6,5,10),c(2,6,11),c(3,7,8),c(4,8,9),c(5,9,10),c(6,10,11),c(2,11,7),c(12,8,7),c(12,9,8),c(12,10,9),c(12,11,10),c(12,7,11))
  • 正三角形で張られる凸多面体は、4,6,8,10,12,14,16,20の8種類
    • うち3種類は正多面体
    • 残り5種類は正三角形
    • この8種類は、凸デルタ多面体と言う
      • ここでいう凸とは、すべての三角形が隣接する三角形と凸関係になることを意味する(平面状になることも非凸とする
      • 隣接する三角形が平面状に並ぶ場合は、coplanar trianglesがあると言い、そのような多面体は、Non-strictly-convex (triangular) polyherdonと言う
      • 隣接する三角形がk角形(k>3)となるので、凸多面体ではあるけれど、構成面が三角形だけとは限らないとみなされる
      • Non-strictly-convexなもの、凹部分も許したデルタ多面体は無限にある
    • 5種類のstrictly-convex delta polyhedra
      • デルタ6面体 triangular bipyramid, hexahedron、デルタ10面体 pentagonal bipyramid, decahedron、デルタ12面体 snub disphenoid, dodecahedron、デルタ14面体 triaugmented triangular prism, tetracaideca-deltahedron、デルタ16面体 gyroelongated square bipyramid, heccaideca-deltahedron
# strictly-convex delta-hedron
hexa <- rbind(c(1,2,3),c(1,3,4),c(1,4,2),c(5,3,2),c(5,4,3),c(5,2,4))
deca <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,6),c(1,6,2),c(7,3,2),c(7,4,3),c(7,5,4),c(7,6,5),c(7,2,6))
# decaは5角錐の張り合わせ。dodecaはその張り合わせ部分に2つの三角形を割り込ませたもの
dodeca <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,6),c(1,6,2),c(7,3,2),c(7,4,3),c(7,5,4),c(7,8,5),c(7,2,8),c(2,6,8),c(8,6,5))
# 正三角柱(側面は正方形)の側面に正四角錐を張り付け
tetracaideca <- rbind(c(1,2,3),c(7,8,9),c(4,2,1),c(4,1,7),c(4,7,8),c(4,8,2),c(5,3,2),c(5,2,8),c(5,8,9),c(5,9,3),c(6,1,3),c(6,3,9),c(6,9,7),c(6,7,1))
# 正四角錐で正四角反柱をサンドイッチ
heccaideca <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,2),c(10,7,6),c(10,8,7),c(10,9,8),c(10,6,9),c(2,6,3),c(3,7,4),c(4,8,5),c(5,9,2),c(3,6,7),c(4,7,8),c(5,8,9),c(2,9,6))
  • ジョンソンの立体
    • 上記8種類凸デルタ多面体のうち、正多面体3種を除いた5種はジョンソンの立体と呼ばれる凸多面体にも含まれる
    • ジョンソンの立体とは、等長多角形で張られた凸多面体で、正多面体、半正多面体、アルキメデスの角柱、アルキメデスの反角柱を除いたものである
    • ジョンソンの立体の構成多角形は3角形であっても他の多角形であってもよく、異なる辺数の多角形が混ざっていてもよい
    • 全92種類であることが確認されている
    • 上記の5種の凸デルタ多面体(正多面体を除く)は、すべての多角形が三角形であるジョンソンの立体とも言える。
    • ジョンソンの立体で、構成多角形が3角形のみ、6角形のみ、3角形または6角形のみのものは、6角形を三角形に分割することで、non-strictly-convexな正三角形による多面体とみなしうるが、そのようなジョンソンの立体は、三角形のみからなる5種類のジョンソン立体=凸デルタ多面体のみであることが知られている。したがって、三角形で張られたstrictly-convex,non-strictly-convexな多面体の列挙にあたって、ジョンソンの立体は考慮する必要がない
    • ジョンソンの立体が三角メッシュの双対グラフになっている可能性は、エッジ数が3kで頂点数が2k、面数がk+2になっている場合であって、3正則グラフになっている場合に限られる。その目で、92種を確認すると、どれも満足しないことがわかる
    • したがって、ジョンソンの立体はそれ自体もその双対グラフも、正三角形メッシュの探索候補としては、5種の凸デルタ多面体以外にはならない
  • 非ジョンソンの立体
    • ジョンソンの立体に含まれない多面体には、正多面体、半正多面体、アルキメデスの角柱(プリズム)、アルキメデスの反角柱(アンチプリズム)がある
    • 正多面体の検討は済んでいる
    • 半正多面体の中には、サッカーボールがあり、これは3正則グラフであり、双対グラフが凹三角形メッシュに対応するから、要検討対象であることがわかる。実際、エッジ数と頂点数の関係が3k,2kになっているものが多数あり、それらはいずれも、3正則グラフである
    • アルキメデスの角柱は側面が正方形であるので、そのものを三角メッシュにはできないが、双対が三角メッシュになる。上面と下面は任意角形でよい
    • アルキメデスの反角柱は側面が正三角形であり、上面と下面が正三角形または正六角形の場合には三角メッシュとなる
  • 半正多面体
    • 凸な一様多面体のうち、正多面体を除いたもの
    • 一様多面体は、すべての構成面が多角形で、すべての頂点が合同(対称性がある)
    • 半正多面体のうち、辺数・頂点数が3k,2kの関係になっているものは、すべての頂点が合同であるから、すべての頂点が3となり、3正則グラフである。これの双対は三角メッシュなので、そのような半正多面体を半正多面体のリストから抽出する
    • 切頂四面体 truncated tetrahedron
trunc.tetra <- rbind(c(1,2,3),c(1,3,4),c(1,4,2),c(2,5,3),c(3,6,4),c(4,7,2),c(8,5,2),c(8,3,5),c(8,6,3),c(8,4,6),c(8,7,4),c(8,2,7))
    • 切頂六面体
# 半正多面体 truncated cube
trunc.tetra <- rbind(c(1,2,3),c(1,3,4),c(1,4,2),c(2,5,3),c(3,6,4),c(4,7,2),c(8,5,2),c(8,3,5),c(8,6,3),c(8,4,6),c(8,7,4),c(8,2,7))
    • 切頂八面体 truncated octahedron
trunc.octa <- rbind(c(1,2,6),c(1,6,3),c(1,3,7),c(1,7,4),c(1,4,5),c(1,5,2),c(6,2,11),c(6,11,9),c(6,9,12),c(6,12,3),c(7,3,12),c(7,12,10),c(7,10,13),c(7,13,4),c(5,4,13),c(5,13,8),c(5,8,11),c(5,11,2),c(9,14,12),c(12,14,10),c(10,14,13),c(13,14,8),c(8,14,11),c(11,14,9))
    • 切頂十二面体 truncated dodecahedron
trunc.dodeca <- rbind(c(1,2,7),c(1,7,3),c(1,3,8),c(1,8,4),c(1,4,9),c(1,9,5),c(1,5,10),c(1,10,6),c(1,6,11),c(1,11,2),c(2,11,7),c(3,7,8),c(4,8,9),c(5,9,10),c(6,10,11),c(7,12,8),c(8,14,9),c(9,16,10),c(10,18,11),c(11,20,7),c(7,20,26),c(7,26,21),c(7,21,22),c(7,22,12),c(8,12,22),c(8,22,13),c(8,13,23),c(8,23,14),c(9,14,23),c(9,23,15),c(9,15,24),c(9,24,16),c(10,16,22),c(10,22,17),c(10,17,25),c(10,25,18),c(11,18,25),c(11,25,19),c(11,19,26),c(11,26,20),c(21,26,22),c(13,22,23),c(15,23,24),c(17,24,25),c(19,25,26),c(22,26,31),c(22,31,32),c(22,32,27),c(22,27,23),c(23,27,32),c(23,32,28),c(23,28,24),c(24,28,32),c(24,32,29),c(24,20,25),c(25,29,32),c(25,32,30),c(25,30,26),c(26,30,32),c(26,32,31))
    • 切頂二十面体(サッカーボール)
trunc.icosa <- rbind(c(1,7,4),c(4,7,8),c(1,9,7),c(1,2,9),c(2,23,9),c(2,3,23),c(3,29,23),c(3,19,29),c(3,13,19),c(2,13,3),c(2,10,13),c(1,10,2),c(1,5,10),c(1,4,5),c(4,6,5),c(4,8,6),c(6,8,17),c(8,26,17),c(17,26,31),c(17,31,16),c(6,17,16),c(11,6,16),c(5,6,11),c(5,11,12),c(10,5,12),c(10,12,13),c(13,12,14),c(13,14,19),c(8,21,26),c(8,7,21),c(7,22,21),c(7,9,22),c(9,23,22),c(22,23,25),c(23,29,25),c(16,31,32),c(16,32,15),c(16,15,11),c(11,15,12),c(12,15,14),c(15,32,18),c(15,18,14),c(14,18,19),c(20,19,18),c(29,19,20),c(26,27,31),c(27,26,24),c(26,21,24),c(21,22,24),c(24,22,25),c(27,24,28),c(24,25,28),c(25,29,28),c(28,29,20),c(31,27,30),c(27,28,30),c(28,20,30),c(32,31,30),c(18,32,30),c(20,18,30))
    • 斜方切頂立方八面体 truncated cuboctahedron
trunc.cubocuta <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,2),c(2,5,9),c(2,9,8),c(2,8,6),c(2,6,3),c(3,6,10),c(3,10,16),c(3,16,11),c(3,11,7),c(3,7,4),c(4,7,12),c(4,12,8),c(4,8,5),c(5,8,13),c(5,13,19),c(5,19,14),c(5,14,9),c(6,15,10),c(7,11,12),c(8,12,13),c(9,14,15),c(10,15,21),c(10,21,22),c(10,22,16),c(16,22,11),c(11,22,17),c(11,17,12),c(12,17,23),c(12,23,18),c(12,18,13),c(13,18,24),c(13,24,19),c(19,24,14),c(14,24,20),c(14,20,15),c(15,20,25),c(15,25,21),c(21,25,22),c(22,25,26),c(22,26,23),c(22,23,17),c(23,26,24),c(23,24,18),c(24,26,25),c(20,24,25))
    • 斜方切頂二十・十二面体 truncated icosidodecahedron 辺数180、頂点数(三角メッシュの三角面数)120なのでちょっと列挙は省略
  • アルキメデスの角柱(プリズム)の双対としての三角メッシュ
# アルキメデスの角柱(プリズム)
# 上面・下面がk角形であり、側面が正方形であるような角柱を考える
# 3正則グラフなので、この双対グラフとしての三角メッシュを作る関数を作る
my.prism.tri <- function(k){
	top =1
	bottom = k+2
	sides = 2:(k+1)
	sides <- c(sides,2)
	ret <- matrix(0,0,3)
	for(i in 1:k){
		tmp1 <- c(top,sides[i],sides[i+1])
		tmp2 <- c(bottom,sides[i+1],sides[i])
		ret <- rbind(ret,tmp1,tmp2)
	}
	return(ret)
}
my.prism.tri(4)
# 上面・下面が3角形・6角形のそれぞれのアンチプリズム
antiprism3 <- octa # 正八面体のこと
antiprism6 <- rbind(c(1,2,3),c(1,3,4),c(1,4,5),c(1,5,6),c(1,6,7),c(1,7,2),c(14,9,8),c(14,10,9),c(14,11,10),c(14,12,11),c(14,13,12),c(14,8,13),c(2,8,3),c(3,9,4),c(4,10,5),c(5,11,6),c(6,12,7),c(7,13,2),c(3,8,9),c(4,9,10),c(5,10,11),c(6,11,12),c(7,12,13),c(2,13,8))
  • 面行列を一括して: