コード例 #1
0
ファイル: a.c プロジェクト: 98943mek/IOI
void findpolongs() {
 long x1,y1,x2,y2,a2,b2,c2;
 long i,k;
 scanf("%ld %ld",&xc,&yc);
 n=0; scanf("%ld %ld",&x,&y);
 minx=x; miny=y;
 maxx=x; maxy=y;
 while (morepolongs()) {
  px[++n]=x; py[n]=y;
  if (minx>x) minx=x;
  if (miny>y) miny=y;
  if (maxx<x) maxx=x;
  if (maxy<y) maxy=y;
  scanf("%ld %ld",&x,&y);
  }
 width=maxx-minx; height=maxy-miny;
 grahamscan();
 start=1;
 for (i=2; i<=m; i++)
  if (hull[i]<hull[start]) start=i;
 i=start; k=hull[i];
 x2=px[k]; y2=py[k];
 c2=(x2-xc)*(x2-xc)+(y2-yc)*(y2-yc);
 do {
  i=(i<m) ? i+1 : 1;
  k=hull[i];
  x1=x2; y1=y2;
  x2=px[k]; y2=py[k];
  a2=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
  b2=c2;
  c2=(x2-xc)*(x2-xc)+(y2-yc)*(y2-yc);
  }
 while (a2*a2-b2*b2-c2*c2+2*b2*c2<=0);
 printf("%-20s%2ld\n",thing,k);
 }
コード例 #2
0
ファイル: convexhull.c プロジェクト: fadhinata/imagetool
int convexhulling(polygon_t *chull, point_list_t *points, convexhull_method_t way)
{
  int cnt;

  assert(chull);
  assert(points);
  assert(point_list_get_count(points));

  switch (way) {
  case JAVIS_MARCH: cnt = jarvismarch(chull, points); break;
  case GRAHAM_SCAN: cnt = grahamscan(chull, points); break;
  case QUICK_HULL: cnt = quickhull(chull, points); break;
  default: abort(); break;
  }

  return cnt;
}