首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

hdu1115题,觉得是一道比较简单的计算几何题,不知为什么,是wa,请大家帮忙看一上

2012-09-14 
hdu1115题,觉得是一道比较简单的计算几何题,不知为什么,是wa,请大家帮忙看一下此题是给多边型坐标点求重心

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;
}

取绝对值会错,因为可能有凹边形。

热点排行