已知全部棱长求三棱锥体积:凯莱-门格行列式

大家好我是渡鸽,发现还是写老本行的文章舒服,今天再摸一篇鱼,敬请雅正。

熟悉竞赛几何学的读者可能知道,给定一个三角形的三条边 \(a,b,c\) 和半周长 \(p=\frac12(a+b+c)\),就可以确定一个唯一的三角形,它的面积由海伦(Heron)-秦九韶公式给出:
\[\mathbf{S}=\sqrt{p(p-a)(p-b)(p-c)}\]

那么根据生活经验,六条给定的边也可以确定一个唯一的四面体(是三棱锥的另一种说法),它的体积有没有什么方法计算呢?答案是肯定的。

(以下线性代数高能,没有学过的话请酌情阅读)

想求空间四面体的体积,我们先从一个简单的引理入手:

引理:把一个任意的 \(d\)-单形补全变成平行多面体,它的体积将成为原来的 \(d!\) 倍。

这里的 \(d\)-单形指的是“ \(d\) 维空间中的三角形状物体”,也就是说 \(d=2\) 的时候指的是三角形,\(d=3\) 的时候就是四面体。平行多面体是一种“对边平行、对面平行”等等的多面体,在二维中是平行四边形,在三维中是平行六面体。

因此这个定理就是说,三角形的面积是底乘高除以 \(2!=2\),四面体的体积是一个面上的底乘高,再乘上它本身关于这个面的高,除以 \(3!=6\)。

证明:使用微积分的话这个引理有个非常简单的证明,把 \(f(x)=1\) 从 \(0\) 到 \(1\) 一直积分 \(d\) 次再求值就能得到 \(\frac1{d!}\) 于是证毕了,但是这里介绍一个更初等的证明:

先取平行多面体的一条体对角线,称作 \(\mathrm{AB}\),例如每个坐标都在 \([0,1]\) 范围中围成的正立方体中的从 \(\mathrm A=(0,0,0)\) 到 \(\mathrm B=(1,1,1)\) 的连线。之后从 \(\mathrm A\) 出发,在每个方向上各走一步(一步一条棱)到达 \(\mathrm B\),这条路径就会和 \(\mathrm{AB}\) 共同围成一个 \(d\)-单形。(如果严谨一些的话,用平行关系和祖暅原理不难得出从这个平行多面体中衍生出的任何一个 \(d\)-单形的体积都相同。)

之后的这一步,形象一点说我们要把平行多面体沿着 \(\mathrm{AB}\) 这一条贯穿中心的直线,剥成 \(d\)-单形的“橘子瓣”——每一瓣橘子肉都由从 \(\mathrm A\) 到 \(\mathrm B\) 的 \(d\) 步路径的“橘子表面”和 \(\mathrm{AB}\) 这一条“芯”共同围成。例如目光沿着正立方体的一条体对角线看可以看到一个正六边形,那么这个正六边形的每一条边到它的正中心的这一段三角形就是正立方体的一个“橘子瓣”。(想追着严谨性不放的读者们,可以试着证明这种分割是成立的。)

可以注意到,我们一开始寻找橘子表面的 \(d\) 步路径时,第一步总要从一共 \(d\) 种可能的方向之中选一种(立方体的话就是 \(x,y,z\) 共三种),之后选过的方向不能再次选择(多于 \(d\) 步的路径无法保证围成单形),于是每一条路径都是 \(d\) 个不同的方向的全排列,因此这个橘子一共就有 \(d!\) 个瓣,一个平行多面体的体积就是相应 \(d\)-单形的 \(d!\) 倍,证毕。


 

虽然还是不知道这个每条边棱长有什么关系,但是平行多面体的体积等于行列式的绝对值,我们可以列式子了:

假设这个 \(d\)-单形的 \(d+1\) 个顶点分别是 \(\vec v_1,\vec v_2,\dots,\vec v_{d+1}\)(我们视 \(d\) 维坐标为 \(d\) 维空间中的向量),再假设要求的体积是 \(\mathbf V\),行列式的符号一律写作 \(\text{det}\),那么可以列式并转化:

\[\begin{align*}\mathbf V&=\frac1{d!}\left | \text{det}\Big( \vec v_2-\vec v_1,\vec v_3-\vec v_1,\dots,\vec v_{d+1}-\vec v_1 \Big)\right |\\[5px]
&=\frac1{d!}\left | \text{det}\begin{pmatrix}
1 & 0 & \cdots & 0\\
\vec v_1 & \vec v_2-\vec v_1 & \cdots & \vec v_{d+1}-\vec v_1
\end{pmatrix}\right |\\[5px]
&=\frac1{d!}\left | \text{det}\begin{pmatrix}
1 & 1 & \cdots & 1\\
\vec v_1 & \vec v_2 & \cdots & \vec v_{d+1}
\end{pmatrix}\right |\end{align*}\]

可能有人在纳闷儿:诶,为什么我还不直接代入 \(d=3\),别着急,最后该有的总会有的。对上式两边同时平方并继续转化:

\[\begin{align*}\mathbf V^2&=\frac1{(d!)^2}\text{det}^2
\begin{pmatrix}\cdots&1&\cdots\\
\cdots&\vec v_i&\cdots\end{pmatrix}\\[5px]
&=\frac1{(d!)^2}\text{det}\begin{pmatrix}
\vdots &\vdots \\ 1 &{\vec v_i}^\text{T} \\
\vdots & \vdots \end{pmatrix}
\begin{pmatrix}\cdots&1&\cdots\\
\cdots&\vec v_j&\cdots\end{pmatrix}\\[5px]
&=\frac1{(d!)^2}\text{det}
\begin{pmatrix} & \vdots & \\
\cdots & \vec v_i\cdot \vec v_j+1 & \cdots \\
& \vdots & \end{pmatrix}\\[5px]
&=\frac1{(d!)^2}\text{det}
\begin{pmatrix}1&1&\cdots&1\\0& & \vdots & \\
\vdots&\cdots & \vec v_i\cdot \vec v_j+1 & \cdots \\
0& & \vdots & \end{pmatrix}\\[5px]
&=\frac1{(d!)^2}\text{det}
\begin{pmatrix}\color{orange}1&1&\cdots&1\\\color{green}{-1}& & \vdots & \\
\color{green}{\vdots}&\cdots & \vec v_i\cdot \vec v_j & \cdots \\
\color{green}{-1}& & \vdots & \end{pmatrix}\\[5px]
&=\frac1{(d!)^2}\left[\text{det}
\begin{pmatrix}\color{orange}1&1&\cdots&1\\0& & \vdots & \\
\vdots&\cdots & \vec v_i\cdot \vec v_j & \cdots \\
0& & \vdots & \end{pmatrix}-\text{det}
\begin{pmatrix}0&1&\cdots&1\\\color{green}1& & \vdots & \\
\color{green}\vdots&\cdots & \vec v_i\cdot \vec v_j & \cdots \\
\color{green}1& & \vdots & \end{pmatrix}\right]\\[5px]
&=\frac1{(d!)^2}\left[\underbrace{\text{det}^2
\begin{pmatrix}\cdots&0&\cdots\\
\cdots&\vec v_i&\cdots\end{pmatrix}}_{=0}
-\text{det}
\begin{pmatrix}0&1&\cdots&1\\1& & \vdots & \\
\vdots&\cdots & \vec v_i\cdot \vec v_j & \cdots \\
1& & \vdots & \end{pmatrix}\right]\tag{1}\\[5px]
&=-\frac1{(d!)^2}\text{det}
\begin{pmatrix}0&1&\cdots&1\\1& & \vdots & \\
\vdots&\cdots & \vec v_i\cdot \vec v_j & \cdots \\
1& & \vdots & \end{pmatrix}\\[5px]
&=-\frac1{(d!)^2(-2)^d}\text{det}
\begin{pmatrix}0&1&\cdots&1\\1& & \vdots & \\
\vdots&\cdots &\left(-2 \vec v_i\cdot \vec v_j \right)& \cdots \\
1& & \vdots & \end{pmatrix}\tag{2}\\[5px]
&=-\frac1{(d!)^2(-2)^d}\text{det}
\begin{pmatrix}
0&\color{orange}1&\color{orange}\cdots&\color{orange}1\\
\color{green}1& & \vdots & \\
\color{green}\vdots&\cdots &\left(\color{orange}{\vec v_i^2}-2 \vec v_i\cdot \vec v_j \color{green}{+\vec v_j^2}\right)& \cdots \\
\color{green}1& & \vdots & \end{pmatrix}\tag{3}\\[5px]
&=-\frac1{(d!)^2(-2)^d}\text{det}
\begin{pmatrix}0&1&\cdots&1\\1& & \vdots & \\
\vdots&\cdots &\left \| \vec v_i-\vec v_j \right \|^2& \cdots \\
1& & \vdots & \end{pmatrix}\end{align*}\]

注释:
1. 上一行第一个行列式在去边之后可以和之前一样使用 \(\text{det}\,A^\text{T}A=\text{det}^2 A\) 的恒等式求值。
2. 此处给第 \(2\) 列开始的一共 \(d+1\) 列都乘以 \(-2\),再把第一行一整行除以 \(-2\)。
3. 此处把第一行的 \(\vec v_i^2\) 倍加到下面,并把第一列的 \(\vec v_j^2\) 倍加到了右面。

很有意思的事情发生了,体积 \(\mathbf V\) 这下变成了只关于模长 \(\left \| \vec v_i-\vec v_j \right \|\) 的函数,而这个模长恰好就是顶点 \(i\) 到顶点 \(j\) 之间的距离,也就是棱长。由此我们得到了海伦-秦九韶公式的很自然的高维推广,退化到三维空间 \(d=3\) 内的情形(终于!),我们便有了如下的定理:

定理:\(\textrm{ABCD}\) 是三维空间中的任意四面体,若它的体积为 \(\mathbf V\),则

\[\mathbf V^2=\frac1{288}\text{det}\begin{pmatrix}
0 & 1 & 1 & 1 & 1\\
1 & 0 & \text{AB}^2 & \text{AC}^2 & \text{AD}^2\\
1 & \text{AB}^2 & 0 & \text{BC}^2 & \text{BD}^2\\
1 & \text{AC}^2 & \text{BC}^2 & 0 & \text{CD}^2\\
1 & \text{AD}^2 & \text{BD}^2 & \text{CD}^2 & 0
\end{pmatrix}\]

上述巨大的行列式就叫做凯莱-门格(Cayley-Menger)行列式。

照例感谢您的阅读(=´∀`)人(´∀`=)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注