самая понятная формула, выражающая объем тетраэдра через его ребра, дается определителем Кэли–Менгера:
CM = matrix([
[0, 1, 1, 1, 1],
[1, 0, U**2, V**2, w**2],
[1, U**2, 0, W**2, v**2],
[1, V**2, W**2, 0, u**2],
[1, w**2, v**2, u**2, 0 ]
])
V2_CM = det(CM)/288
для полиномиальности здесь сразу вычисляется не объем, а его квадрат… но формуле от Маркелова и этого недостаточно, так как в определение «переменных третьего поколения» (a, b, c, d) через «переменные второго поколения» входят квадратные корни
но если раскрыть скобки в числителе, то останутся только квадраты этих товарищей, а также произведение abcd (которое тоже полином от «переменных второго поколения»)
X, x = (w-U+v)*(U+v+w), (U-v+w)*(v-w+U)
Y, y = (u-V+w)*(V+w+u), (V-w+u)*(w-u+V)
Z, z = (v-W+u)*(W+u+v), (W-u+v)*(u-v+W)
a2 = x*Y*Z
b2 = y*Z*X
c2 = z*X*Y
d2 = x*y*z
abcd = X*Y*Z*x*y*z
num2 = (
2*(a2*b2+a2*c2+a2*d2+b2*c2+b2*d2+c2*d2)
- (a2**2+b2**2+c2**2+d2**2)
+ 8*abcd
)
V2_markelov = num2/(192*u*v*w)**2
после этих ухищрений
V2_CM - V2_markelov.expand() действительно дает нольно вопрос, что всё это значит — можно ли выражениям типа b+c+d-a придать какой-то геометрический смысл, скажем, как это происходит в формуле Герона — остается
мб кто-то в комментариях научит
