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;
2,四面体的体积为,由于现在不知道向量怎么打出来,我就插张图片了,
将这个式子平方后得到:
3,根据矢量数量积的坐标表达式及数量积的定义得
又根据余弦定理得
4,将上述的式子带入(1),就得到了传说中的欧拉四面体公式
在这里说明一点这里面的推导我也是看的,要是是我自己推出来的,我不就欧拉了,哈哈。
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 }
没有人能阻止我前进的步伐,除了我自己!