题目链接 https://nanti.jisuanke.com/t/A2226
题解: 给定3个点坐标,求内接圆和外接圆半径。
以第三个点为原点,另2个点计算新坐标。 然后利用向量的叉积求出三角形面积s,然后利用正弦定理可以求出外接圆半径,再利用 1/2 * r(a+b+c)= s,求出内接圆半径。
具体题解链接https://www.jisuanke.com/course/1980/162840 (63分钟处)
#include <cstdio>
#include <cmath>
using namespace std;
double PI = acos(-1);
int x1,y11,x2,y2,x3,y3;
int t;
int main()
{
scanf("%d",&t);
while(t--) {
scanf("%d%d%d%d%d%d",&x1,&y11,&x2,&y2,&x3,&y3);
x1 -= x3;
x2 -= x3;
y11 -= y3;
y2 -= y3;
if(x1*y2==x2*y11) {
printf("NO SOLUTION\n");
continue;
}
double s = fabs(x1 * y2-x2 * y11);
double a = sqrt(x1 * x1+y11 * y11);
double b = sqrt(x2 * x2+y2 * y2);
double c = sqrt((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2));
double r1 = a*b*c / s / 2;
double r2 = s / (a+b+c);
printf("%.10lf %.10lf\n",PI*r2*r2,PI*r1*r1);
}
return 0;
}