和吴昊一起玩推理 Round 7 —— 三角形区域内细绳的膨胀(计算几何)(HDOJ 1451)

 

(Source:HDOJ 1451) 如图所示,这个三角形里面有一根细绳,假设这根细绳会往外膨胀,直到膨胀到不能再膨胀位置,我们需要计算的,就是细绳膨胀到不能再膨胀的时候,其包围的总面积(这里不考虑细绳会撑破整个三角形)。

  那么,我们开始推理吧!

  一刻推理:绳子在不断膨胀的过程中,不规则的部分会逐渐变规则,这乃是一个事实。那么,具体是怎么变化的呢?这个比较复杂,而且,缺少必要的条件,但是,我们需要管它吗?管它做甚??!

  二刻推理:由 一刻推理的分析,我们可以得知,只需要管细绳的最终状态就可以了,而没有必要在中间过程中过多纠缠。那么,我们可以想象地到,最终的发展趋势具有如下四种 可能:(1)内部圆(2)内切圆(这是一种临界情况)(3)三个方向都挨着一些长度,而对着三个角的方向安放着三段弧(4)当细绳的长度大于等于三角形的 周长时,我们发现,细绳已经覆盖了整个三角形,考虑到绳子无穷细,所以,剩余的部分叠合在三角形的顶点处。

  三刻推理:如何去求解呢?碰撞的形状不一样,但是,难道就没有什么共性可以追寻的吗?经过分析,我们发现,虽然弧度所对应的半径的确是不一样,但这只是表象而不是本质,其本质在于,其弧对应的角度是相等的。想到了这一点,我们可以继续得到,三段弧恰好组成一个圆!

  四刻推理:剩下的,只有三个线段的长度和了,怎么办?相似形。没有错,通过相似的方法,我们可以得到由三段长拼成的三角形与原三角形是相似的,那么,问题已经迎刃而解了,剩下的事情,就是Coding了……

 

 1  #include<stdio.h>
 2  #include<math.h>
 3  #define eps 1e-9
 4  #define pi acos(-1.0)
 5  int main()
 6  {
 7    int T=0;
 8    double a,b,c,len,p0,p1,S,R,r;
 9 
10    //len为自由线的长度;p0为原三角形的周长;p1为原三角形的半周长;
11    
12    //R为原三角形的内切圆半径;r为相似三角形的内切圆半径。
13    while(scanf("%lf%lf%lf%lf",&a,&b,&c,&len),a+b+c+len)
14    {
15      //T为样例数
16      printf("Case %d: ",++T);
17      p0=a+b+c;
18      p1=p0/2;
19      //海伦公式,已知三边以及三角形的半周长可以计算出面积
20      S=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
21      if(len>=p0)  
22      {
23        //定位为两个小数点
24        printf("%.2lf\n",S);
25        continue;
26      }
27      //自由线长大于三角形周长
28      R=2*S/p0; //三角形内切圆公式S=p0*R/2; R为内切圆半径
29      //这里考虑到加入细绳膨胀不到内切圆这个地步,这里取一个极小值eps避免了浮点误差
30      if(2*pi*R-len>eps)
31      {
32        R=len/pi/2;
33        S=pi*R*R;
34        printf("%.2lf\n",S);
35        continue;
36      }
37      //这个地方如果没有找到原有的公式的话,是最难理解的了;
38      //利用的就是三角形相似的原理;公式;p0/R*(R-r)=len-2*pi*R;左边是通过内切圆半径与周长的关系求
39      //得小三角形的周长;右边是通过自由线的长度减掉三段弧得到相似三角形的周长;
40      r=(p0-len)/(p0/R-2*pi);//三角形相似
41      //由三角形相似可以得到对应的边长
42      a=a/R*(R-r);
43      b=b/R*(R-r);
44      c=c/R*(R-r);
45      p1=(a+b+c)/2;
46      S=pi*r*r+sqrt(p1*(p1-a)*(p1-b)*(p1-c))+r*(a+b+c);//分三个部分求面积
47      printf("%.2lf\n",S);
48    }
49    return 0;
50  }

posted on 2013-02-27 22:34  吴昊系列  阅读(384)  评论(0编辑  收藏  举报

导航