zoukankan      html  css  js  c++  java
  • 欧拉四面体体积应用

    这种应用一种公式,注意如果共面体积是负数,要特判

    Problem Description

    已知一个三角形ABC三点在空间内的坐标,和空间某一点q到ABC三点的距离,求q点到ABC的距离。
    保证存在点q和ABC不共线。

    Input

    第一行是样例个数。
    每一个样例前三行是ABC坐标。
    最后一行是q到平面ABC三点的距离。

    Output

    对于每一个样例,输出一个两位小数。

    Sample Input

    1
    7.000000 49.000000 73.000000
    58.000000 30.000000 72.000000
    44.000000 78.000000 23.000000
    199.231022 148.680866 163.300337

    Sample Output

    0.00

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<set>
    using namespace std;
    const double eps=1e-8;
    
    double a1,b1,c1,a2,b2,c2,a3,b3,c3;
    double x,y,z;
    double P( double a,double b,double c,double d,double e ){ return a*(b*c-d*e); }
    double V(double OA,double OB,double OC,double AB,double CA,double BC){
        OA*=OA;OB*=OB;OC*=OC;AB*=AB;CA*=CA;BC*=BC;
        double ans=0;
        ans+=P( OA,OB,OC,(OB+OC-BC)/2.,(OB+OC-BC)/2. );
        ans-=P( (OA+OB-AB)/2.,(OA+OB-AB)/2.,OC,(OA+OC-CA)/2.,(OB+OC-BC)/2. );
        ans+=P( (OA+OC-CA)/2.,(OA+OB-AB)/2.,(OB+OC-BC)/2.,OB,(OA+OC-CA)/2.);
        if(ans<0) return 0;
        else return sqrt(ans);
    }
    double dis(double a,double b,double c){
        return sqrt(a*a+b*b+c*c);
    }
    double S(double a,double b,double c){
         double s=(a+b+c)/2;
         double area=sqrt(s*(s-a)*(s-b)*(s-c));
         return area;
    }
    int main(){
        int T;
        int i,j,k;
        scanf("%d",&T);
        while(T--){
            scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a1,&b1,&c1,&a2,&b2,&c2,&a3,&b3,&c3);
            scanf("%lf%lf%lf",&x,&y,&z);
            double x4=dis(a1-a2,b1-b2,c1-c2);
            double x5=dis(a1-a3,b1-b3,c1-c3);
            double x6=dis(a2-a3,b2-b3,c2-c3);
            double ans=V(x,y,z,x4,x5,x6)/(S(x4,x5,x6)*2);
            printf("%.2f
    ",ans);
        }
        return 0;
    }


  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/Basasuya/p/8433775.html
Copyright © 2011-2022 走看看