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