三角形內心座標-Strike

內心是角平分線的交點,到三邊距離相等.
設:在三角形ABC中,三頂點的座標爲:A(x1,y1),B(x2,y2),C(x3,y3) BC=a,CA=b,AB=c
內心爲M (X,Y)則有aMA+bMB+cMC=0(三個向量)
MA=(X1-X,Y1-Y)
MB=(X2-X,Y2-Y)
MC=(X3-X,Y3-Y)
則:a(X1-X)+b(X2-X)+c(X3-X)=0,a(Y1-Y)+b(Y2-Y)+c(Y3-Y)=0
∴X=(aX1+bX2+cX3)/(a+b+c),Y=(aY1+bY2+cY3)/(a+b+c)
∴M((aX1+bX2+cX3)/(a+b+c),(aY1+bY2+cY3)/(a+b+c))


這裏寫圖片描述
現在給出 Richard 所在地點的座標,給出三名敵人的座標,請計算 Richard 要投擲的 距離。

Input

首先輸入一個整數 T,代表有 T 組測試實例。(1<=T<=10)
對於每組測試樣例,第一行爲 Richard 的座標(x,y) 第二行爲敵人的座標(x1,y1) (x2,y2) (x3,y3) 0≤xi≤100,0≤yi≤100,xi,yi 均爲整數。
Output
對於每組測試樣例,輸出 Richard 要扔的距離,結果佔一行,保留 2 位小數,格式見 樣例。

Sample Input

1
(75,123)
(88,131) (82,115) (95,121)

9
(35,38)
(92,2)(59,18)(83,57)
(33,77)
(93,21)(86,77)(38,24)
(38,74)
(32,36)(36,96)(15,1)
(23,88)
(70,97)(87,26)(22,88)
(49,99)
(21,47)(52,80)(75,78)
(97,98)
(86,20)(54,54)(76,77)
(29,76)
(40,65)(18,20)(57,25)
(14,11)
(63,30)(58,97)(69,84)
(43,46)
(83,1)(30,58)(51,63)

Sample Output

14.07

43.93
56.00
38.27
35.93
26.11
52.21
42.06
87.19
7.82

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define LENGTH(x1,y1,x2,y2)  (sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)))

int main()
{
    int t,x,y,i,j;
    double a,b,c,x1,y1,x2,y2,x3,y3,m,n,z;

    scanf("%d\n", &t);
    while(t--)
    {
        scanf("(%d,%d)\n", &x, &y);
        scanf("(%lf,%lf) (%lf,%lf) (%lf,%lf)", &x1, &y1 ,&x2, &y2, &x3, &y3);
        fflush(stdin);

        a = LENGTH(x2,y2,x3,y3);
        b = LENGTH(x1,y1,x3,y3);
        c = LENGTH(x1,y1,x2,y2);

        m = (a * x1 + b * x2 + c * x3)/(a + b + c);
        n = (a * y1 + b * y2 + c * y3)/(a + b + c);

        z = LENGTH(x,y,m,n);

        printf("%.2lf", z);


        if(t != 0) printf("\n");
    }
    return 0;
}

看到可以宏定義求距離函數的方法。
括號輸入無法載入問題後也換行即可
fflush(stdin);重載

發佈了55 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章