BNU 4209:Triangle(三角形の内接円の中心を求めます)

1086 ワード

三角形ABCの内部で一点Pを選択し、Pを過ぎて三辺までの垂線を作り、D,E,FはPからBC,CA,ABまでの垂足である.
 
S=BC/PD+CA/PE+AB/PFとする
 
P点がどこにあるかを聞くとSの値が一番小さい.
Input
入力データは3行を含み、各行は2つの実数を含み、それぞれ三角形の3つの頂点A,B,Cの座標を与える.
 
Output
2つの実数を出力し、S値が最小のときのP点座標を与え、2桁の小数を保持する.
 
 
Sample Input
0.0 1.0
1000.0 0.0
-1000.0 0.0

Sample Output
0.00 0.50
 
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;

int main(void)
{
    double x1,x2,x3,y1,y2,y3,a,b,c;

    scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
    a=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
    b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
    c=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    printf("%.2f %.2f
",(a*x1+b*x2+c*x3)/(a+b+c),(a*y1+b*y2+c*y3)/(a+b+c)); return 0; }