三角形内心坐标-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);重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值