hdu1115题,觉得是一道比较简单的计算几何题,不知为什么,是wa,请大家帮忙看一下
此题是给多边型坐标点求重心的
http://acm.hdu.edu.cn/showproblem.php?pid=1115
下面是我的代码:
#include<iostream>
#include<cmath>
using namespace std;
struct point{
double x;
double y;
};
double fangcha(double a,double b,double c,double d)
{
double s=a*d-b*c;
if(s<0)return -s;
else return s;
}
int main()
{
int T,i,j,k,n;
double ss,x,y;
point p0,p1,p2;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
scanf("%lf%lf",&p0.x,&p0.y);
scanf("%lf%lf",&p1.x,&p1.y);
double sums,sumx,sumy;
sums=0;
sumx=0;
sumy=0;
x=0;
y=0;
for(i=2;i<n;i++)
{
scanf("%lf%lf",&p2.x,&p2.y);
ss=fangcha(p1.x-p0.x,p1.y-p0.y,p2.x-p0.x,p2.y-p0.y);
sums+=ss;
x=p0.x+p1.x+p2.x;
y=p0.y+p1.y+p2.y;
sumx+=x*ss;
sumy+=y*ss;
p1=p2;
}
printf("%.2lf %.2lf\n",sumx/(sums*3.0),sumy/(sums*3.0));
}
return 0;
}
[解决办法]
double fangcha(double a,double b,double c,double d)
{
double s=a*d-b*c;
if(s<0)return -s;
else return s;
}
改为
double fangcha(double a,double b,double c,double d)
{
double s=a*d-b*c;
return s;
}
取绝对值会错,因为可能有凹边形。