首页 > 其他 > 详细

POJ 2208 Pyramids 欧拉四面体

时间:2014-08-20 21:05:12      阅读:354      评论:0      收藏:0      [点我收藏+]

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

 

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

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\n",euler(OA, OB, OC, AB, BC, CA));
    }
    return 0;
}

 

POJ 2208 Pyramids 欧拉四面体,布布扣,bubuko.com

POJ 2208 Pyramids 欧拉四面体

原文:http://www.cnblogs.com/wushuaiyi/p/3925434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!