海伦公式:
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:而公式里的p为半周长(周长的一半)
求三角形内切圆和外切圆的半径:
内切圆:三角形内切bai圆半径:r=2S/(a+b+c)
外切圆:三角形外接圆的半径:R=abc/4S
例题:
F - 程序设计:掎角之势 计蒜客 - A2226
在《亮剑》中,李云龙发动的平安战役不仅把晋西北搅成一锅粥,还成为了第二次世界大战的转折点。
晋绥军 358
团楚云飞得到探报,有大批日军向平安县城移动,于是他准备帮帮场子。友军在平安附近有三个团的兵力,分别是李云龙的独立团,丁伟的新一团,孔捷的新二团,他们三人互成掎角之势。
作为黄埔军校毕业生的楚云飞,对自己的数学非常自信。在研究了友军的防区分布后,想知道李云龙、丁伟、孔捷这三人指挥部位置所形成的三角形的内切圆和外接圆的面积。因为他们的位置是不断变化的,每次重新算一遍很麻烦,想请你编程帮忙来计算。
输入格式
第一行一个整数 T
,表示数据的组数。
接下来 T
行,每行 6 个整数 x1,y1,x2,y2,x3,y3
,分别表示李云龙、丁伟、孔捷这三人指挥部的坐标。
输出格式
对于每组数据,如果不能组成三角形,输出"NO SOLUTION",否则输出两个空格分隔的实数,分别表示内切圆和外接圆的面积。相对误差或者绝对误差在 10−6
范围内就认为是正确的。
数据范围
对于 40%
的数据:T≤100,x1=y2=x3=y3=0,0≤y1,x2≤100。
对于 100%
的数据:T≤10000,−10000≤x1,y1,x2,y2,x3,y3≤10000。
Sample Input
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
Sample Output
3.1415926536 19.6349540849
NO SOLUTION
1.0780241689 6.2831853072
29.9995403716 122.7184630309
ac代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int x1,y1,x2,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
double a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
double c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
//cout<<a<<" "<<b<<" "<<c<<endl;
if((x1-x2)*(y1-y3)*1.0!=(x1-x3)*(y1-y2)*1.0)//判断三个点是否能构成三角形,即判断这三点是不是在一条直线上,如果这个三个点构成的其中两条边平行,那它一定不是三角形
{
double p=(a+b+c)/2.0;
//cout<<p<<endl;
double s=sqrt(p*(p-a)*(p-b)*(p-c));
double r1,r2,s1,s2;
r1=2.0*s/(a+b+c);
r2=a*b*c/(4.0*s);
s1=acos(-1)*r1*r1;
s2=acos(-1)*r2*r2;
printf("%.10lf %.10lf\n",s1,s2);
}
else
{
cout<<"NO SOLUTION"<<endl;
}
}
return 0;
}