题目大意
给定三个点(不共线)的坐标,要求以这三个点为圆心做三个圆,圆两两不相交,不包含,问三个圆的直径和最大为多少。
题目解析
三个点不共线,则为三角形。
先做出三角形的内切圆,与三角形三边有三个切点,分别为
E
,
F
,
G
E,F,G
E,F,G。
根据切线长定理,可以知道
B
F
=
B
E
,
A
F
=
A
G
,
C
G
=
C
E
BF=BE,AF=AG,CG=CE
BF=BE,AF=AG,CG=CE
以三点为圆心,切线长为半径作出三个圆,显然是不相交的三个圆。
综上所述,三个圆的直径和
=
B
F
+
B
E
+
A
F
+
A
G
+
C
G
+
C
E
=
A
B
+
A
C
+
B
C
=BF+BE+AF+AG+CG+CE=AB+AC+BC
=BF+BE+AF+AG+CG+CE=AB+AC+BC,即三角形周长。
所以这道题就是求三角形的周长,根据两点间距离公式(勾股定理),求出三条边长。
注意:可能边长会是小数,注意精度问题
#include<bits/stdc++.h>
using namespace std;
int t;
double ans,x[5],y[5];
double fun(double a,double b) {return a*a+b*b;}
int main()
{
cin>>t;
while(t--)
{
for(int i=1;i<=3;i++) cin>>x[i]>>y[i];
ans=sqrt(fun(x[1]-x[2],y[1]-y[2]))+sqrt(fun(x[1]-x[3],y[1]-y[3]))+sqrt(fun(x[2]-x[3],y[2]-y[3]));
cout<<(int)ans<<endl;
}
}