HDU1411求四面体体积

本文介绍了欧拉体积公式及其应用,并通过两种方法详细解释了如何使用该公式来计算四面体的体积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欧拉体积公式:

/***************************************************
 方法一:
 欧拉体积公式用行列式求,见上图;
 ***************************************************/

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;

double p,q,r,m,n,l;
double v[3][3];

double det_cal()//行列式计算
{
    double v1=v[0][0]*v[1][1]*v[2][2];
    double v2=v[0][1]*v[1][2]*v[2][0];
    double v3=v[1][0]*v[2][1]*v[0][2];
    double v4=v[0][1]*v[1][0]*v[2][2];
    double v5=v[2][0]*v[1][1]*v[0][2];
    double v6=v[0][0]*v[2][1]*v[1][2];
    
    return (v1+v2+v3)-(v4+v5+v6);
}

int main()
{
    double vs;//体积平方
    
    while(cin>>p>>q>>r>>n>>m>>l)
    {
        v[0][0]=p*p;//对行列式赋值
        v[0][1]=v[1][0]=(p*p+q*q-n*n)/2;
        v[0][2]=v[2][0]=(p*p+r*r-m*m)/2;
        v[1][1]=q*q;
        v[1][2]=v[2][1]=(q*q+r*r-l*l)/2;
        v[2][2]=r*r;
        vs=det_cal();
        printf("%.4lf\n",sqrt(vs/36));
    }
    return 0;
}

/******************************************************
方法二:
四面体ABCD中:
AD=a, AB=c, AC=b,;
∠CAD=∠ga, ∠CAB=∠gb, ∠DAB=∠gc;
∠gw=(∠ga+∠gb+∠gc)/2;
则体积公式为:
V=sqrt(sin∠gw*sin∠(gw-ga)*sin∠(gw-gb)*sin∠(gw-gc))*a*b*c/3;
*******************************************************/

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
double angle(double AB, double AC, double BC)//triangle ABC 的angleA, rad//求角度
{
    return acos((AC*AC+AB*AB-BC*BC)/(2*AB*AC));
}
int main()
{
    double ab, ac, ad, bc, bd, cd;
    double a, b, c, ga, gb, gc, gw;
    
    while(~scanf("%lf%lf%lf%lf%lf%lf", &ab, &ac, &ad, &bc, &bd, &cd))
    {
        a=ad;
        b=ac;
        c=ab;
        ga=angle(ac, ad, cd);
        gb=angle(ac, ab, bc);
        gc=angle(ad, ab, bd);
        gw=(ga+gb+gc)/2;
        
        printf("%.4lf\n", sqrt(sin(gw)*sin(gw-ga)*sin(gw-gb)*sin(gw-gc))*a*b*c/3);
    }
    return 0;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值