• POJ 2208 Pyramids 欧拉四面体


    给出边长,直接就可以求出体积咯

     

    关于欧拉四面体公式的推导及证明过程

    2010-08-16 14:18

    1,建议x,y,z直角坐标系。设A、B、C少拿点的坐标分别为(a1,b1,c1),(a2,b2,c2),(a3,b3,c3),四面体O-ABC的六条棱长分别为l,m,n,p,q,r;

    2,四面体的体积为,由于现在不知道向量怎么打出来,我就插张图片了,




    将这个式子平方后得到:

    3,根据矢量数量积的坐标表达式及数量积的定义得



    又根据余弦定理得

    4,将上述的式子带入(1),就得到了传说中的欧拉四面体公式

    摘自:http://www.cnblogs.com/kuangbin/archive/2012/04/13/2446378.html

    代码:

    //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
    #include <stdio.h>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define ll long long
    #define Max(a,b) (((a) > (b)) ? (a) : (b))
    #define Min(a,b) (((a) < (b)) ? (a) : (b))
    #define Abs(x) (((x) > 0) ? (x) : (-(x)))
    
    using namespace std;
    
    double P( double a,double b,double c,double d,double e ){
        return a*(b*c-d*e);
    }
    
    double EulerTetrahedron(double OA, double OB, double OC, double AB, double BC, double CA){
        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.);
        return sqrt(ans/36);
    }
    int main(){
        double OA,OB,OC,AB,BC,CA;
        while( scanf("%lf%lf%lf%lf%lf%lf",&OA,&OB,&OC,&AB,&CA,&BC)!=EOF ){
            printf("%.4f
    ",euler(OA, OB, OC, AB, BC, CA));
        }
        return 0;
    }
  • 相关阅读:
    c# 坑人的发邮件组件
    生成拼音
    FileDb
    WMI tester
    c# 纯代码调用 webservice
    c# 中 利用 CookieContainer 对 Cookie 进行序列化和反序列化校验
    在经过身份验证的服务中不支持跨域 javascript 回调
    c# 使用 namedpipe 通信
    c++ 创建线程以及参数传递
    c#函数地址传入c++
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3925434.html
Copyright © 2020-2023  润新知