又是好长时间没写博客了,暑假集训终于还是安排了下来。
这个暑假任务很艰巨,首先要把以前学过的东西重新的捡起来,还要再花一大部分的时间学习新的知识。
再有三个月左右就是亚洲区域赛了,今年压力很大,要顶住压力拿银奖,RP如果再度爆发的话就冲刺Gold...
废话不多说了,进入正题:
这道题的意思很简单,给出一个四面体的六条棱的长度,让你求这个四面体的体积。
这道题如果是放在高中的话,我想会很easy的解决,但现在"老了",这些个东西都忘的差不多了!
上网偶然搜到一个课件“类似于海伦公式的四面体体积公式”:
所以这道题可以直接调用这个公式,我是用1.0/2*a*b*sinc=S这个公式来求角度的,
然后S用海伦公式求出来,不过这个时候需要判断下这个角是锐角还是钝角!
代码:
View Code
1 # include<stdio.h>
2 # include<math.h>
3 # define PI 3.1415926
4 int main()
5 {
6 double a,b,c,d,e,f,S,S1,S2,S3,r1,r3,r2,p1,p2,p3,r;
7 while(scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f)!=EOF)
8 {
9 S=1.0/3*a*b*c;
10
11 p1=1.0/2*(a+b+d);
12 S1=sqrt(p1*(p1-a)*(p1-b)*(p1-d));
13 r1=asin(2*S1/(a*b));
14 if(d*d>a*a+b*b) r1=PI-r1;//判断是否为钝角
15
16 p2=1.0/2*(a+c+e);
17 S2=sqrt(p2*(p2-a)*(p2-c)*(p2-e));
18 r2=asin(2*S2/(a*c));
19 if(e*e>a*a+c*c) r2=PI-r2;//判断是否为钝角
20
21 p3=1.0/2*(b+c+f);
22 S3=sqrt(p3*(p3-b)*(p3-c)*(p3-f));
23 r3=asin(2*S3/(b*c));
24 if(f*f>b*b+c*c) r3=PI-r3;//判断是否为钝角
25
26 r=1.0/2*(r1+r2+r3);
27 S*=sqrt(sin(r)* sin(r-r1)* sin(r-r2)*sin(r-r3));
28 printf("%.4lf\n",S);
29 }
30 return 0;
31 }