amori's blog

よろず技術系と趣味関係の雑記です。アニメの比重が高くなってます・・

超立体の体積(容積)計算

不勉強なことにグラム行列というものを知りませんでした。機械学習関係の解説でちょいちょい目にしますが、そちらはわたしには高尚過ぎますので、シンプルにグラム行列式が体積計算に便利(なこともある)ということ改めて知ったというお話です。

例えば、3つのベクトルがなす平行六面体の体積Vは、そのベクトルからなる3×3行列、仮にAとして、その行列式|A|から求められます。
 A = [\bf{a}, \bf{b}, \bf{c} ] = \left[
 \begin{array}{ccc}
  a_{x} & b_{x} & c_{x} \\
  a_{y} & b_{y} & c_{y} \\
  a_{z} & b_{z} & c_{z}
 \end{array}\right]
 V= |A| = a_{x}b_{y}c_{z} +a_{y}b_{z}c_{x} +a_{z}b_{x}c_{y} -a_{z}b_{y}c_{x} -a_{y}b_{x}c_{z} +a_{x}b_{z}c_{y}


グラム行列は、AとAの転置の積
 A^{\mathrm{T}}A
 =  \left[
 \begin{array}{ccc}
  |\bf{a}|^{2} & \bf{a} \bf{b} & \bf{a} \bf{c} \\
  \bf{b} \bf{a} & |\bf{b}|^{2} & \bf{b} \bf{c} \\
  \bf{c} \bf{a} & \bf{c} \bf{b} & |\bf{c}|^{2}
 \end{array}\right]
なのでグラム行列式は平行六面体の体積の二乗になるのは明らかです。

わざわざ積をとるのが何で便利かというと、グラム行列の要素が全部、元のベクトルの内積となりベクトルの要素を直接計算しなくてよくなるのです。

正四面体のように辺と角の関係がシンプルな場合だと計算が実に単純になります。
各ベクトルは長さ1、ベクトルがなす角は60度なので内積は全て1/2。
 \displaystyle G = \left[
 \begin{array}{ccc}
  1 & \frac{1}{2} & \frac{1}{2} \\
  \frac{1}{2} & 1 & \frac{1}{2} \\
  \frac{1}{2} & \frac{1}{2} & 1
 \end{array}\right]

グラム行列式は、対角要素が全て1、その他が1/2なので、行列式

 1+\frac{1}{8} +\frac{1}{8} -\frac{1}{4} -\frac{1}{4} -\frac{1}{4}=\frac{1}{2}
これのルートが平行六面体の体積で、正四面体はその1/6で、 \frac{\sqrt{2}}{12}となります。

この計算は4次元以上についても全く同じで、正四面体の4次元の拡張である5胞体については、4次のグラム行列式を求めればよいわけです。
対角要素が1、他が1/2であるn次行列の行列式は、一般に
 \frac{n+1}{2^n}
となります。
#詳細は以下の記事を参照ください。
amori.hatenablog.com
さらに一般化した行列式計算はこちらです。
amori.hatenablog.com


よってn次元の超三角錐は、
 \frac{1}{n!}\sqrt{\frac{n+1}{2^n}}
となります。
5胞体は、n=4で超体積は \frac{\sqrt{5}}{96}です。
https://ja.m.wikipedia.org/wiki/正五胞体
ちなみに、2次元は正三角形の面積、 \frac{\sqrt{3}}{4}になってますね。