UVA11524 InCircle(计算几何基础)

Sample Input

2
140.9500536497
15.3010457320 550.3704847907
464.9681681852 65.9737378230
55.0132446384 10.7791711946
208.2835101182
145.7725891419 8.8264176452
7.6610997600 436.1911036207
483.6031801012 140.2797089713

Sample Output

400156.4075
908824.1322

有一个三角形,内有一内切圆,给出内切圆的半径,P Q R 三点分别将三角形三边分成 m:n 的比例,给出三边 m ,n 的值,求三角形的面积

根据海伦公式计算三角形内切圆的半径有:\small r=\sqrt{\frac{(p-a)(p-b)(p-c)}{p}} 其中 \small p=\frac{a+b+c}{2} ,根据边长比以及三角形内切圆的性质,很容易得出三边的关系

设 AB=x,所以由三角形全等得到 \small AB*\frac{n1}{n1+m1}=BC*\frac{m2}{n2+m2}

同理 AB 与 AC 同样满足这样的关系,也就是说我们已经将三条边表示为 :x , k1*x,k2*x 的形式,(x 未知) ,这样在海伦公式中将 x 提出来,求解 x 的值即可得到三边的值

    double r;
    double a[4],b[4];
    
int main()
{
    //IOS;
    rush(){
        sf(r);
        for(int i=1;i<=3;i++) sff(a[i],b[i]);
        double x=1;
        double y=b[1]*(a[2]+b[2])/(a[1]+b[1])/a[2];
        double z=a[1]*(a[3]+b[3])/(a[1]+b[1])/b[3];
        double p=(x+y+z)/2;
        double AB=r*sqrt(p/(p-x)/(p-y)/(p-z));
        double BC=AB*y;
        double AC=AB*z;
        printf("%.4lf\n",(AB+BC+AC)*r/2);
    }
    //PAUSE;
    return 0;
}

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页