天天看點

poj 1905Expanding Rods

/*

  二分 + 幾何

  弧長L, 圓半徑R, 弧度 q, L=R*q;

  二分: 弧度(0~PI) 或者 高度(L/2~L) 

*/

#include<cstdio> 

#include<iostream>

#include<cmath>

using namespace std;

const double PI = acos(-1.0);

double L, L1, T, C, R, Q;

int main(){

   while(scanf("%lf%lf%lf", &L, &T, &C) && (L!=-1 || T!=-1 || C!=-1)){

      L1 = (1+T*C)*L;

      double ld=0.0, rd=PI, tmp;

      Q = (ld+rd)/2; 

      R = L/2/sin(Q);

      while(fabs(tmp = R*2*Q-L1)>1e-8){

         if(tmp>0) rd=Q;

         else ld=Q;

         Q=(ld+rd)/2;

         R = L/2/sin(Q);

      }

      printf("%.3lf\n", R-sqrt(R*R - (L/2)*(L/2)));

   } 

   return 0;

}

本文轉自 小眼兒 部落格園部落格,原文連結:http://www.cnblogs.com/hujunzheng/p/3876698.html,如需轉載請自行聯系原作者

繼續閱讀