#include<stdio.h>
#include<math.h>
struct point
{
double x,y;
}a[5003],O;
double squre(point i,point j,point k)
{
double s;
s=i.x*j.y-i.x*k.y+j.x*k.y-j.x*i.y+k.x*i.y-k.x*j.y;
return fabs(s/2);
}
double dist(point i,point j)
{
double l;
l=sqrt((i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y));
return l;
}
int main()
{
int n,i,i1,i2,i3;
double s,t,k,len=0,max;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
a[n]=a[0];
s=0;
for(i=0;i<n;i++) s+=fabs(a[i].x*a[i+1].y-a[i+1].x*a[i].y);
s=s/4; //接下来的s为面积的一半 _finished_
max=0;
for(i=0;i<n;i++)
{
t=0;
i1=i;
while(1)
{
i2=(i1+1)%n;
i3=(i2+1)%n;
t+=squre(a[i1],a[i2],a[i3]);
if(t>=s) break;
}
//printf("%lf",t);
k=1-(t-s)/squre(a[i1],a[i2],a[i3]);//printf("%lf\n",k);
O.x=a[i3].x+(a[i2].x-a[i3].x)*k;
O.y=a[i3].y+(a[i2].y-a[i3].y)*k; //printf("%lf %lf",O.x,O.y);
len=dist(O,a[i1]);//printf("%lf\n",len);
if(len>max) {
max=len;
}
}
printf("%lf",max);
return 0;
}
输入
5
0 0
99999 20000
100000 70000
33344 63344
1 50000
输出
120182.575925
输入
4
0 0
10 0
10 10
0 10
输出
14.142136
输入
3
0 0
6 0
3 10
输出
10.000000