hdu 1411 校庆神秘建筑(计算几何)

校庆神秘建筑

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1370    Accepted Submission(s): 428


Problem Description
杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑物有点象古老埃及的金字塔,不过这个神秘建筑的根基是三角形的而不是矩形的,从数学的专业角度来讲,它是四面体。当我打算上交我的设计图纸的时候发现,我不知道怎么计算这个神秘建筑的体积(我知道这座建筑的各边的尺寸),于是我找来了聪明的你来帮助我解决这个难题。
 

Input
输入文件包含6个不超过1000的实数,每个数之间用空格隔开。每个数代表金字塔ABCD的一条棱边长度,棱边排序如下:AB,AC,AD,BC,BD,CD。
 

Output
输出数据应是一个实数,表示金字塔的体积,精确到4位小数。
 

Sample Input
 
   
2 2 2 2 2 2
 

Sample Output
 
   
0.9428
 

Author
Eddy
 

Source
HDU 2006-5 Programming Contest
 

Recommend
lxj
 

题解:欧拉体积公式求四面体体积


#include
#include
double p,q,r,n,m,l,res;
double a,b,c,d,e,f;
double v[3][3];
void init()
{
    v[0][0]=p*p;
    v[0][1]=(p*p+q*q-n*n)/2;
    v[0][2]=(p*p+r*r-m*m)/2;
    v[1][0]=(p*p+q*q-n*n)/2;
    v[1][1]=q*q;
    v[1][2]=(q*q+r*r-l*l)/2;
    v[2][0]=(p*p+r*r-m*m)/2;
    v[2][1]=(q*q+r*r-l*l)/2;
    v[2][2]=r*r;
}
void cal()
{
    a=v[0][0]*v[1][1]*v[2][2];
    b=v[0][1]*v[1][2]*v[2][0];
    c=v[0][2]*v[1][0]*v[2][1];
    d=v[0][2]*v[1][1]*v[2][0];
    e=v[0][1]*v[1][0]*v[2][2];
    f=v[0][0]*v[1][2]*v[2][1];
    res=(a+b+c-d-e-f);
}
int main()
{
    while(scanf("%lf%lf%lf%lf%lf%lf",&p,&q,&r,&n,&m,&l)>0)
    {
        init();
        cal();
        printf("%.4lf\n",sqrt(res/36));
    }

    return 0;
}


你可能感兴趣的:(ACM之路(c/c++),计算几何)