四面体(三棱锥)体积 : 
 设  
 有:
  
 不过这是有向的。如果知道那四个顶点,用这个公式即可求出体积。
 如果不知道四点仅知道6条边长,就得用下面的方法——欧拉四面体公式
 写成行列式:
 
 那么有:
 
 转置:
 
 行列式乘法:
 
 其中,
 因为:
 
 所以:
 
 有:
 
 进一步简化:
 
 
 
题目: 
 
 HDU 1411 
 
 
 http://acm.hdu.edu.cn/showproblem.php?pid=1411 
 
大意:给出6边求出四面体的体积 
 
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int main()
{//freopen("cin.txt","r",stdin);double p,q,l,r,m,n;while(~scanf("%lf%lf%lf%lf%lf%lf",&p,&q,&l,&r,&m,&n)){double part1=p*p+q*q-r*r;  //p*p*q*q*l*l;double part2=q*q+l*l-n*n;double part3=l*l+p*p-m*m;double ans=4*p*p*q*q*l*l+part1*part2*part3-q*q*part3*part3-l*l*part1*part1-p*p*part2*part2;ans=sqrt(ans/144);printf("%.4lf\n",ans);}return 0;
} 
 POJ 2208 
 
 
 http://poj.org/problem?id=2208 
 
用同样的思路此题却过不了了。神奇!! 
 
难道是精度要求更高吗? 
 
查阅资料发现,另一种方案可行: 
 
设 :
有:
S=
证明来自: 
 
 
 http://wenku.baidu.com/link?url=x-Jy7p-0Iqz75PUSM-iFl4WhXmBY01bFstGCGfmxVCPmUk-pyhTPNB1jmpSSAJaI-jSOlpIs-2dpggmUAZnEN4qwWOYt9By7wuyd446B2SC 
 
而要AC的代码也挺奇葩, 
 
样例的计算结果: 
 1999.9937 
 
AC了 
 
难道这就是所谓的special judge?
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int main()
{//freopen("cin.txt","r",stdin);double p,q,l,r,m,n;while(~scanf("%lf%lf%lf%lf%lf%lf",&p,&q,&l,&r,&m,&n)){double A=acos((p*p+q*q-r*r)/(2*p*q));  double B=acos((p*p+l*l-m*m)/(2*p*l));double R=acos((q*q+l*l-n*n)/(2*q*l));double P=(A+B+R)/2;double ans=p*q*l/3*sqrt(sin(P)*sin(P-A)*sin(P-B)*sin(P-R));printf("%.4lf\n",ans);}return 0;
}
 









