POJ 2208 欧拉四面体公式

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

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

POJ 2208 欧拉四面体公式
将这个式子平方后得到:

POJ 2208 欧拉四面体公式
3,根据矢量数量积的坐标表达式及数量积的定义得

POJ 2208 欧拉四面体公式


又根据余弦定理得

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

POJ 2208 欧拉四面体公式

在这里说明一点这里面的推导我也是看的,要是是我自己推出来的,我不就欧拉了,哈哈。
poj有一道就是关于这个公式的,说实话出这种题很没意思,如果你不知道公式基本上就做不出来,又一次我们学校比赛,有一哥就出了这个题当时叫人只有那么郁闷了,每一个人A。个人感觉这个公式的用处不大不过它表达数学是一种美丽的东西。最后得到的这个公式也是很漂亮的。

相关题目:POJ 2208、HDU 1411

 

以上内容转载于:http://www.cnblogs.com/dgsrz/articles/2590309.html

 

View Code
 1 #include <iostream>

 2 #include <cmath>

 3 #include <cstdio>

 4 #include <cstdlib>

 5 #include <algorithm>

 6 

 7 using namespace std;

 8 

 9 int main()

10 {

11     double a, b, c, d, e, f;

12     while (scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f) != EOF)

13         {

14         double ang1, ang2, ang3, ang;

15         ang1 = acos((b*b+c*c-f*f)/(2*b*c));

16         ang2 = acos((a*a+c*c-e*e)/(2*a*c));

17         ang3 = acos((a*a+b*b-d*d)/(2*a*b));

18         ang = (ang1+ang2+ang3)/2;

19         double res = (1.0/3.0)*a*b*c*sqrt(sin(ang)*sin(ang-ang1)*sin(ang-ang2)*sin(ang-ang3));

20         printf("%.4lf\n", res);

21     }

22     return 0;

23 }

 

 

你可能感兴趣的:(poj)