首页 > 其他 > 详细

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

时间:2014-02-27 18:48:59      阅读:436      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
/*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;
}
bubuko.com,布布扣

UVA11524平面几何+二分法+海伦公式,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/little-w/p/3570194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!