首页 > 编程知识 正文

四面体体积求法

时间:2023-05-04 05:27:32 阅读:263095 作者:2766

四面体(三棱锥)体积 :

有:

不过这是有向的。如果知道那四个顶点,用这个公式即可求出体积。
如果不知道四点仅知道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("%.4lfn",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("%.4lfn",ans); } return 0;}


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。