题目大意:给定三角形三个顶点的坐标,判断是否可形成三角形,如果可形成三角形,求三角形内切圆面积与外接圆面积。
输入格式
第一行一个整数 T,表示数据的组数。接下来 T 行,每行 6 个整数 x1,y1,x2,y2,x3,y3 表示三个点的坐标
输出格式
对于每组数据,如果不能组成三角形,输出"NO SOLUTION",否则输出两个空格分隔的实数,分别表示内切圆和外接圆的面积。相对误差或者绝对误差在 10^-6范围内就认为是正确的。
样例输入:
4
0 3 4 0 0 0
0 0 10 10 -10 -10
3 3 5 3 3 5
0 0 -5 -10 5 -10
样例输出:
3.1415926536 19.6349540849
NO SOLUTION
1.0780241689 6.2831853072
29.9995403716 122.7184630309
#include <cstdio> #include <string.h> #include <iostream> #include <algorithm> #include <math.h> using namespace std; const int inf=0x7fffffff; const long long mod=1e9+7; const double PI=acos(-1); //PI的定义方式 double juli(int x1,int y1,int x2,int y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } int main() { int t; int x1,y1,x2,y2,x3,y3; cin>>t; while(t--){ cin>>x1>>y1>>x2>>y2>>x3>>y3; if((x1-x3)*(y2-y3)==(x2-x3)*(y1-y3)){ cout<<"NO SOLUTION"<<endl; continue; } double a=juli(x1,y1,x2,y2); double b=juli(x1,y1,x3,y3); double c=juli(x2,y2,x3,y3); double p=(a+b+c)/2; double s=sqrt(p*(p-a)*(p-b)*(p-c)); //海伦公式求面积 double r1=2*s/(a+b+c); //三角形内切圆半径 double r2=0.25*a*b*c/s; //三角形外接圆半径 printf("%.10lf %.10lf ",r1*r1*PI,r2*r2*PI); } return 0; }