UVA11524平面几何+二分法+海伦公式

/*UVA11524
平面几何:
使用到的知识比较零碎:
1、三角形内切圆是角平分线的交点,所以连接圆心和顶点,能产生3对全等三角形
2、利用等量关系表示其他量
3、求三角形的两种方法:海伦公式+周长*半径/2
4、当代数式太复杂,手动难以化简,考虑用计算方法二分解决。
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<queue>
#include<vector>
#include<map>
#define LL long long

using namespace std;

//输入 r,m1, n1, m2, n2, m3 and n3

double r,m1,n1,m2,n2,m3,n3;
int t;

double Helen(double a)
{
    double b=(m3+n3)/n3*m1/(n1+m1)*a;
    double c=(m2+n2)/m2*n1/(m1+n1)*a;
    double k=(a+b+c)/2;
    return sqrt(k*(k-a)*(k-b)*(k-c));
}
double F(double x)//x是二分变量AB
{
    double b=(m3+n3)/n3*m1/(n1+m1)*x;
    double c=(m2+n2)/m2*n1/(m1+n1)*x;
    double hel=Helen(x);
    double Fx=hel*2/(x+b+c)-r;
    return Fx;
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>r>>m1>>n1>>m2>>n2>>m3>>n3;
        double L=0,R=10000000;
        while(R-L>1e-7)//F(x)单调递增,先负后正
        {
            double x=(L+R)/2;
            double Fx=F(x);
            if (Fx<0) L=x;else R=x;
        }
        printf("%.5lf\n",Helen(L));
    }
    return 0;
}

 

posted @ 2014-02-26 20:57  little_w  阅读(270)  评论(0编辑  收藏  举报