四次元への扉へ戻る 

 半正多胞体の座標計算

 「四次元半正多胞体」のページで掲げたように、四次元の正多胞体(三次元のプラトンの立体に相当)は6種あり、単純半正多胞体(アルキメデスの立体に相当、ただし左右対称のもののみ)は39種ある。これらの立体(積正多胞体)を表示するための座標を以下で計算する。

● メビウス四面体の座標

 三次元のメビウス三角形に対応する、四次元超球面上の球面四面体を、本稿ではメビウスの四面体と呼ぶことにする。まさかメビウス氏が四次元を研究したのではないとは思う。しかし、幾何学の本を見ると、以下で述べる操作を十分に想起させる「重心座標」は、メビウス氏の発見であるそうだ。だから、こじつけとはいえ、失礼にあたる、というほどでは無い、と強引に納得して、先に進もう。

 メビウス四面体は、正多胞体を覆う正多面体の頂点(P0)、隣接する辺の中点(P1)、隣接する面の中心(P2)、隣接する体の中心(P3)の、4点を中心から外接球などの超球面上に延ばし、対応する超球面上の4点を頂点とする超球面四面体である。特別の理由がない限り、半径1の単位超球の表面上にあるものとする。
 P0-P1、P1-P2、P2-P3の各辺の対辺に隣接する面の交わる角は、シュレーフリ記号{p, q, r}の角度に対応している。たとえば、正五胞体は{3, 3, 3}だから、60°が3つ、ということになる。正600胞体{3, 3, 5}なら、60°60°36°ということになる。
 P0-P1、P1-P2、P2-P3の各辺の対辺を除く辺は3本あり、その3辺(P0-P2, P2-P1, P1-P3)に隣接する面は垂直に配置されている。このややこしい言い方は5次元以上のメビウス多胞体にも通用するので、ここで述べた。ということは、高次元のメビウス多胞体の面は垂直に交わる度合いが急激に増え、そのために高次元の単純半正超多胞体ではやたらと正方形が目立つことになる。

 双対図形のメビウス四面体は同じ形になるので、正5胞体、正16胞体、正24胞体、正600胞体の4種のメビウス四面体を考えればよい。正5胞体、正16胞体、正600胞体は正四面体で覆われているから、面は正三角形、体は正四面体である。正24胞体の面は正三角形だが、体は正八面体である。正24胞体と正600胞体の座標計算には注意が必要だが、幸い、5次元以上には正5胞体と正16胞体に対応する超多胞体しかないので、高次元においては、計算は機械的に可能である。

● 半正多胞体の頂点座標の算出

 最初のメビウスの四面体{P0, P1, P2, P3}が得られたら、内心などの半正多胞体が構成できる点を算出する。
  (1) まずは、4つの頂点が候補になる。正多胞体になる点が含まれているはずである。
  (2) 辺上の点で、対辺に隣接する面の中間の角度の面と交わる点。6つある。
  (3) 各面の内心。4つある。
  (4) 球面四面体に内接する球を考え、その中心(ただし、四次元超曲面に沿った点)。「超球面四面体の内心」と呼べる。
 これらは、「半正多面体の座標計算」と同様に、以下のように系統的に算出できる。

 P0には、対面する三角形P1-P2-P3と原点Oを結んでできる(平らな)四面体{O, P1, P2, P3}の体積で重みをつける。この体積をV123と表すこととする。同様に、P1には四面体{O, P2, P3, P0}の体積V230、P2には四面体{O, P3, P0, P1}の体積V301、P3には四面体{O, P0, P1, P2}の体積V012を掛けた位置ベクトルを算出する。体積で調整後の位置ベクトルを、それぞれPa0, Pa1, Pa2, Pa3と表すことにする。

▼ (平らな)四面体の体積の算出

 体積はどのように算出しても良いのだが、「外積」を用いると算出しやすい。ところで、私は「四次元半正多胞体」のページで掲げた石井論文を見るまで、四次元空間内の「外積」が定義できるとは思ってもみなかった。石井論文によると、四次元ユークリッド空間内で、3つのベクトルから以下の算出方法によって長さが平行六面体の体積で、方向が元の3つのベクトルと垂直なベクトル(つまり「外積」)が得られるという。さらに、この演算は5次元以上のn次元にも拡張できて、n-1個のベクトルから長さが超体積で方向が垂直なベクトル(これも「外積」)が算出できる。
 私の乏しい数学知識では、これを「外積」と呼んで良いのかどうか分からない。そこで、石井氏には大変申し訳ないが、以下カッコつきで「外積」と表すこととする。また、石井氏は四次元の外積をa×b×cと表現しているのだが、これはベクトル三重積のようにも見えるので、×(a, b, c)と表すこととする。
 例として、O(0, 0, 0, 0), P1(xp1, yp1, zp1, up1), P2(xp2, yp2, zp2, up2), P3(xp3, yp3, zp3, up3)の体積を出すために、「外積」×(P1, P2, P3)を算出する。
 ×(P1, P2, P3) =
    ( yp1*zp2*up3+yp2*zp3*up1+yp3*zp1*up2-yp3*zp2*up1-yp2*zp1*up3-yp1*zp3*up2,
      -(zp1*up2*xp3+zp2*up3*xp1+zp3*up1*xp2-zp3*up2*xp1-zp2*up1*xp3-zp1*up3*xp2),
      up1*xp2*yp3+up2*xp3*yp1+up3*xp1*yp2-up3*xp2*yp1-up2*xp1*yp3-up1*xp3*yp2,
      -(xp1*yp2*zp3+xp2*yp3*zp1+xp3*yp1*zp2-xp3*yp2*zp1-xp2*yp1*zp3-xp1*yp3*zp2) )
 見ての通り、各要素は行列式の値である。
 平行六面体の体積は、各要素の二乗の和の(正の)平方根、つまり「外積」ベクトルの長さである。四面体の体積は、その1/6である。
  V123 = (1/6)*×(P1, P2, P3)
  Pa0 = (V123*xp1, V123*yp1, V123*zp1, V123*up1)
 さて、Pa0等の長さそのものには意味がなく、方向と他のPa1等との長さの比率が関心事である。その意味では、半正多胞体を(計算機内で)組み立てる段階で長さを1に調節することもあるので、(1/6)を掛けたのは冗長である。ここでは意味を強調するために掛けた。

▼ 形状ベクトル

 四次元の正多胞体と単純半正多胞体(積正多胞体)の頂点の座標は、4種のメビウス四面体毎に、
  Pa0
  Pa1
  Pa2 (*Pa1)
  Pa3 (*Pa0)
  Pa0+Pa1
  Pa0+Pa2
  Pa0+Pa3
  Pa1+Pa2
  Pa1+Pa3 (*Pa0+Pa2)
  Pa2+Pa3 (*Pa0+Pa1)
  Pa0+Pa1+Pa2
  Pa0+Pa1+Pa3
  Pa0+Pa2+Pa3 (*Pa0+Pa1+Pa3)
  Pa1+Pa2+Pa3 (*Pa0+Pa1+Pa2)
  Pa0+Pa1+Pa2+Pa3
 の15通りある。
 ただし、正5胞体と正24胞体については、メビウス四面体が左右対称のため、(*…)の付いた座標が重複するので、9通りとなる(…は対応する頂点)。
 つまり、9+15+9+15 = 48通りの積正多胞体が得られるのだが、さらに3つの重複があり、結局6+39 = 45通りの積正多胞体となる。

 ここで、形状ベクトル(v0, v1, v2, v3)を導入する。ベクトルといっても、0と1の数字を並べただけのもので、上述の頂点それぞれについて、
  (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (1, 1, 0, 0),
  (1, 0, 1, 0), (1, 0, 0, 1), (0, 1, 1, 0), (0, 1, 0, 1), (0, 0, 1, 1),
  (1, 1, 1, 0), (1, 1, 0, 1), (1, 0, 1, 1), (0, 1, 1, 1), (1, 1, 1, 1)
 が対応する。たとえば、形状ベクトルが(1, 1, 0, 1)なら、Pa0+Pa1+Pa3である。

 積正多胞体は、各メビウス四面体の元となった正多胞体のシュレーフリ記号、
  正5胞体{3, 3, 3}、正16胞体{3, 3, 4}、正24胞体{3, 4, 3}、正600胞体{3, 3, 5}
 と、形状ベクトルを組み合わせて表現する。たとえば、正多胞体は、
  正5胞体 {3, 3, 3}(1, 0, 0, 0)
  正16胞体 {3, 3, 4}(1, 0, 0, 0)
  超立方体 {3, 3, 4}(0, 0, 0, 1)
  正24胞体 {3, 4, 3}(1, 0, 0, 0)
  正600胞体 {3, 3, 5}(1, 0, 0, 0)
  正120胞体 {3, 3, 5}(0, 0, 0, 1)
 などとなる。
 上述の3組の重複とは、
  {3, 3, 4}(0, 1, 0, 0) と {3, 4, 3}(1, 0, 0, 0)
  {3, 3, 4}(1, 0, 1, 0) と {3, 4, 3}(0, 1, 0, 0)
  {3, 3, 4}(1, 1, 1, 0) と {3, 4, 3}(1, 1, 0, 0)
 である。

● メビウス四面体の折り返し

 メビウス四面体を系統的に作成するのは難しくないとはいえ、面で折り返して超球面を覆い尽くす方法を知っておいても損はないだろう。

 たとえば、四面体{P0, P1, P2, P3}から、面{P1, P2, P3}で点P0を折り返して、四面体{P0', P1, P2, P3}を作ることを考える。
 「外積」×(P1, P2, P3)を(xr, yr, zr, ur)とすると、
 ベクトル×(P1, P2, P3)の長さを、dr = sqrt(xr2+yr2+zr2+ur2)と置く。
  P0(xp0, yp0, zp0, up0)
  P1(xp1, yp1, zp1, up1)
  P2(xp2, yp2, zp2, up2)
  P3(xp3, yp3, zp3, up3)
  xr = yp1*zp2*up3+yp2*zp3*up1+yp3*zp1*up2-yp3*zp2*up1-yp2*zp1*up3-yp1*zp3*up2
  yr = -(zp1*up2*xp3+zp2*up3*xp1+zp3*up1*xp2-zp3*up2*xp1-zp2*up1*xp3-zp1*up3*xp2)
  zr = up1*xp2*yp3+up2*xp3*yp1+up3*xp1*yp2-up3*xp2*yp1-up2*xp1*yp3-up1*xp3*yp2
  ur = -(xp1*yp2*zp3+xp2*yp3*zp1+xp3*yp1*zp2-xp3*yp2*zp1-xp2*yp1*zp3-xp1*yp3*zp2)
 「外積」のベクトルを単位化(長さ1に)する。
  (exr, eyr, ezr, eur) = (xr/dr, yr/dr, zr/dr, ur/dr)
 この単位ベクトルと、位置ベクトル(xp0, yp0, zp0, up0)の内積を取る。
  ip = exr*xp0 + eyr*yp0 + ezr*zp0 + eur*up0
 P0'の座標は、
  P0'(xp0 - 2*ip*exr, yp0 - 2*ip*eyr, zp0 - 2*ip*ezr, up0 - 2*ip*eur)
 となる。
 これと同様の操作を各頂点に対して行い、新しくできたメビウス四面体に対しても繰り返すと、四次元超球面はメビウス四面体によって覆い尽くされる。

 2002年10月27日 岡田好一