亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? graham.c

?? 是Computational Geometry in C中的原程序
?? C
字號:
/*This code is described in "Computational Geometry in C" (Second Edition),Chapter 3.  It is not written to be comprehensible without theexplanation in that book.Input: 2n integer coordinates of points in the plane. Output: the convex hull, cw, in PostScript; other output precedes the PS.NB: The original array storing the points is overwritten.Compile: gcc -o graham graham.c  (or simply: make)Written by Joseph O'Rourke.Last modified: October 1997Questions to orourke@cs.smith.edu.--------------------------------------------------------------------This code is Copyright 1998 by Joseph O'Rourke.  It may be freelyredistributed in its entirety provided that this copyright notice isnot removed.--------------------------------------------------------------------*/#include   <stdio.h>#include   <math.h>#include   <stdlib.h>#include   "macros.h"#define EXIT_FAILURE   1#define X   0#define Y   1typedef enum { FALSE, TRUE }   bool;#define DIM 2               /* Dimension of points */typedef int tPointi[DIM];   /* Type integer point *//*----------Point(s) Structure-------------*/typedef struct tPointStructure tsPoint;typedef tsPoint *tPoint;struct tPointStructure {   int     vnum;   tPointi v;   bool    delete;};/* Global variables */#define PMAX    1000               /* Max # of points */typedef tsPoint tPointArray[PMAX];static tPointArray P;int n = 0;                         /* Actual # of points */int ndelete = 0;                   /* Number deleted *//*----------Stack Structure-------------*/typedef struct tStackCell tsStack; /* Used on in NEW() */typedef tsStack *tStack;struct tStackCell {   tPoint   p;   tStack   next;};/*----------Function Prototypes-------------*/tStack	Pop( tStack s );void    PrintStack( tStack t );tStack  Push( tPoint p, tStack top );tStack  Graham( void );void    Squash( void );void	Copy( int i, int j );void    PrintPostscript( tStack t );int     Compare( const void *tp1, const void *tp2 );void    FindLowest( void );void	Swap( int i, int j );int     AreaSign( tPointi a, tPointi b, tPointi c );bool    Left( tPointi a, tPointi b, tPointi c );int     ReadPoints( void );void    PrintPoints( void );main(){   tStack   top;   n = ReadPoints();   FindLowest();   PrintPoints();   qsort(      &P[1],             /* pointer to 1st elem */      n-1,               /* number of elems */      sizeof( tsPoint ), /* size of each elem */      Compare            /* -1,0,+1 compare function */   );   printf("After sorting, ndelete = %d:\n", ndelete);   PrintPoints();   if (ndelete > 0) {      Squash();      printf("After squashing:\n");   }   top = Graham();   printf("Hull:\n");   PrintStack( top );   PrintPostscript( top );}/*---------------------------------------------------------------------FindLowest finds the rightmost lowest point and swaps with 0-th.The lowest point has the min y-coord, and amongst those, themax x-coord: so it is rightmost among the lowest.---------------------------------------------------------------------*/void   FindLowest( void ){   int i;   int m = 0;   /* Index of lowest so far. */   for ( i = 1; i < n; i++ )      if ( (P[i].v[Y] <  P[m].v[Y]) ||          ((P[i].v[Y] == P[m].v[Y]) && (P[i].v[X] > P[m].v[X])) )          m = i;   printf("Swapping %d with 0\n", m);   Swap(0,m); /* Swap P[0] and P[m] */}void	Swap( int i, int j ){   int temp;   /* Uses swap macro. */   SWAP( temp, P[i].vnum,   P[j].vnum );   SWAP( temp, P[i].v[X],   P[j].v[X] );   SWAP( temp, P[i].v[Y],   P[j].v[Y] );   SWAP( temp, P[i].delete, P[j].delete );}/*---------------------------------------------------------------------Compare: returns -1,0,+1 if p1 < p2, =, or > respectively;here "<" means smaller angle.  Follows the conventions of qsort.---------------------------------------------------------------------*/int   Compare( const void *tpi, const void *tpj ){   int a;             /* area */   int x, y;          /* projections of ri & rj in 1st quadrant */   tPoint pi, pj;   pi = (tPoint)tpi;   pj = (tPoint)tpj;   a = AreaSign( P[0].v, pi->v, pj->v );   if (a > 0)      return -1;   else if (a < 0)      return 1;   else { /* Collinear with P[0] */      x =  abs( pi->v[X] -  P[0].v[X] ) - abs( pj->v[X] -  P[0].v[X] );      y =  abs( pi->v[Y] -  P[0].v[Y] ) - abs( pj->v[Y] -  P[0].v[Y] );      ndelete++;      if ( (x < 0) || (y < 0) ) {         pi->delete = TRUE;         return -1;      }      else if ( (x > 0) || (y > 0) ) {         pj->delete = TRUE;         return 1;      }      else { /* points are coincident */         if (pi->vnum > pj->vnum)             pj->delete = TRUE;         else              pi->delete = TRUE;         return 0;      }   }}/*---------------------------------------------------------------------Pops off top elment of stack s, frees up the cell, and returns new top.---------------------------------------------------------------------*/tStack   Pop( tStack s ){   tStack top;   top = s->next;   FREE( s );   return top;}/*---------------------------------------------------------------------Get a new cell, fill it with p, and push it onto the stack.Return pointer to new stack top.---------------------------------------------------------------------*/tStack   Push( tPoint p, tStack top ){   tStack   s;   /* Get new cell and fill it with point. */   NEW( s, tsStack );   s->p = p;   s->next = top;   return s;}/*------------------------------------------------------------------------------------------------------------------------------------------*/void   PrintStack( tStack t ){   if (!t) printf("Empty stack\n");   while (t) {       printf("vnum=%d\tx=%d\ty=%d\n",              t->p->vnum,t->p->v[X],t->p->v[Y]);       t = t->next;   }}/*---------------------------------------------------------------------Performs the Graham scan on an array of angularly sorted points P.---------------------------------------------------------------------*/tStack   Graham(){   tStack   top;   int i;   tPoint p1, p2;  /* Top two points on stack. */   /* Initialize stack. */   top = NULL;   top = Push ( &P[0], top );   top = Push ( &P[1], top );   /* Bottom two elements will never be removed. */   i = 2;   while ( i < n ) {      printf("Stack at top of while loop, i=%d, vnum=%d:\n", i, P[i].vnum);      PrintStack( top );      if( !top->next) printf("Error\n"),exit(EXIT_FAILURE);      p1 = top->next->p;      p2 = top->p;      if ( Left( p1->v , p2->v, P[i].v ) ) {         top = Push ( &P[i], top );         i++;      } else             top = Pop( top );      printf("Stack at bot of while loop, i=%d, vnum=%d:\n", i, P[i].vnum);      PrintStack( top );      putchar('\n');   }   return top;}/*---------------------------------------------------------------------Squash removes all elements from P marked delete.---------------------------------------------------------------------*/void   Squash( void ){   int i, j;   i = 0; j = 0;   /*printf("Squash: n=%d\n",n);*/   while ( i < n ) {      /*printf("i=%d,j=%d\n",i,j);*/      if ( !P[i].delete ) { /* if not marked for deletion */         Copy( i, j ); /* Copy P[i] to P[j]. */         j++;      }      /* else do nothing: delete by skipping. */      i++;   }   n = j;   printf("After Squash: n=%d\n",n);   PrintPoints();}void	Copy( int i, int j ){   P[j].v[X] = P[i].v[X];   P[j].v[Y] = P[i].v[Y];   P[j].vnum = P[i].vnum;   P[j].delete = P[i].delete;}/*---------------------------------------------------------------------Returns twice the signed area of the triangle determined by a,b,c.The area is positive if a,b,c are oriented ccw, negative if cw,and zero if the points are collinear.---------------------------------------------------------------------*/int     Area2( tPointi a, tPointi b, tPointi c ){   return          (b[X] - a[X]) * (c[Y] - a[Y]) -          (c[X] - a[X]) * (b[Y] - a[Y]);}/*---------------------------------------------------------------------Returns true iff c is strictly to the left of the directedline through a to b.---------------------------------------------------------------------*/bool   Left( tPointi a, tPointi b, tPointi c ){    return  Area2( a, b, c ) > 0;}/*---------------------------------------------------------------------Reads in the coordinates of the points from stdin,puts them into P, and returns n, the number of vertices.Initializes other fields of point structure.---------------------------------------------------------------------*/int    ReadPoints( void ){   int n = 0;   while ( (n < PMAX) && (scanf("%d %d",&P[n].v[0],&P[n].v[1]) != EOF) ) {      P[n].vnum = n;      P[n].delete = FALSE;      /*printf("vnum=%3d, x=%4d, y=%4d, delete=%d\n", 	 P[n].vnum, P[n].v[X], P[n].v[Y], P[n].delete);*/      ++n;   }   if (n < PMAX)      printf("n = %3d vertices read\n",n);   else {      printf("Error in ReadPoints:  too many points; max is %d\n", PMAX);      exit(EXIT_FAILURE);   }   return n;}void   PrintPoints( void ){   int   i;   printf("Points:\n");   for( i = 0; i < n; i++ )      printf("vnum=%3d, x=%4d, y=%4d, delete=%d\n", 	     P[i].vnum, P[i].v[X], P[i].v[Y], P[i].delete);}void   PrintPostscript( tStack t){   int   i;   int xmin, ymin, xmax, ymax;   xmin = xmax = P[0].v[X];   ymin = ymax = P[0].v[Y];   for (i = 1; i < n; i++) {      if      ( P[i].v[X] > xmax ) xmax = P[i].v[X];      else if ( P[i].v[X] < xmin ) xmin = P[i].v[X];      if      ( P[i].v[Y] > ymax ) ymax = P[i].v[Y];      else if ( P[i].v[Y] < ymin ) ymin = P[i].v[Y];   }   /* PostScript header */   printf("%%!PS\n");   printf("%%%%Creator: graham.c (Joseph O'Rourke)\n");   printf("%%%%BoundingBox: %d %d %d %d\n", xmin, ymin, xmax, ymax);   printf("%%%%EndComments\n");   printf(".00 .00 setlinewidth\n");   printf("%d %d translate\n", -xmin+72, -ymin+72 );   /* The +72 shifts the figure one inch from the lower left corner */   /* Draw the points as little circles. */   printf("newpath\n");   printf("\n%%Points:\n");   for (i = 0; i < n; i++)      printf("%d\t%d\t1  0  360\tarc\tstroke\n", P[i].v[X], P[i].v[Y]);   printf("closepath\n");   /* Draw the polygon. */   printf("\n%%Hull:\n");   printf("newpath\n");   printf("%d\t%d\tmoveto\n", t->p->v[X], t->p->v[Y]);   while (t) {      printf("%d\t%d\tlineto\n", t->p->v[X], t->p->v[Y]);      t = t->next;   }   printf("closepath stroke\n");   printf("showpage\n%%%%EOF\n");}int     AreaSign( tPointi a, tPointi b, tPointi c ){    double area2;    area2 = ( b[0] - a[0] ) * (double)( c[1] - a[1] ) -            ( c[0] - a[0] ) * (double)( b[1] - a[1] );    /* The area should be an integer. */    if      ( area2 >  0.5 ) return  1;    else if ( area2 < -0.5 ) return -1;    else                     return  0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本一区二区三区四区在线视频| 成人动漫一区二区在线| 亚洲一区在线看| 国产亚洲短视频| 欧美男女性生活在线直播观看| 国产69精品久久久久毛片| 天堂va蜜桃一区二区三区漫画版| 国产网红主播福利一区二区| 69堂成人精品免费视频| 成+人+亚洲+综合天堂| 蜜臂av日日欢夜夜爽一区| 一区二区三区四区在线播放 | 欧美日韩一区二区三区免费看| 国产精品一区二区你懂的| 视频一区二区不卡| 一区二区三区高清| 国产精品美女久久久久久久| 久久这里只有精品6| 欧美乱熟臀69xxxxxx| 99re在线视频这里只有精品| 国产精品一色哟哟哟| 日韩va亚洲va欧美va久久| 一区二区三区中文在线| 亚洲同性同志一二三专区| 国产亚洲美州欧州综合国| 日韩你懂的在线播放| 7777精品伊人久久久大香线蕉的| 一本一道久久a久久精品| 99精品欧美一区| 成人激情av网| av电影在线观看一区| 风间由美一区二区av101| 国产精品资源在线看| 精品写真视频在线观看| 精品一区二区免费视频| 麻豆91免费看| 久久99精品国产麻豆不卡| 免费高清不卡av| 蜜乳av一区二区三区| 免费看日韩a级影片| 日本中文字幕不卡| 奇米影视在线99精品| 秋霞午夜av一区二区三区| 奇米精品一区二区三区在线观看| 日韩福利电影在线观看| 日韩高清一区二区| 另类小说一区二区三区| 激情五月激情综合网| 国产一区二区三区av电影| 国产一区二区三区在线观看精品 | 国产成人鲁色资源国产91色综 | 精品在线一区二区| 国产精品一卡二卡| 成人高清免费在线播放| 一本一道波多野结衣一区二区| 91在线视频官网| 欧美三区免费完整视频在线观看| 欧美日韩高清一区二区不卡 | 日韩一区在线看| 夜夜爽夜夜爽精品视频| 午夜视频一区二区| 免费在线观看视频一区| 国产福利一区在线| 91蝌蚪porny| 欧美精品在线一区二区三区| 日韩女优av电影| 国产精品全国免费观看高清| 亚洲女爱视频在线| 日韩av电影一区| 国产精品一卡二| 91久久精品日日躁夜夜躁欧美| 欧美猛男gaygay网站| 精品国内二区三区| 亚洲同性gay激情无套| 日韩精品一级二级| 国产成人激情av| 欧美综合久久久| 精品福利一区二区三区| 亚洲丝袜制服诱惑| 男男视频亚洲欧美| av电影一区二区| 日韩精品在线一区二区| 国产精品久久国产精麻豆99网站| 亚洲一区二区三区不卡国产欧美 | 国产精品小仙女| 欧美日韩国产高清一区二区三区| 2欧美一区二区三区在线观看视频| 中文字幕一区二区在线播放| 日韩制服丝袜av| 成人app在线| 日韩午夜在线观看| 波多野结衣一区二区三区 | 岛国精品在线播放| 777奇米四色成人影色区| 欧美国产日本视频| 蜜臀精品久久久久久蜜臀| hitomi一区二区三区精品| 日韩免费高清电影| 亚洲综合成人网| 99视频一区二区三区| 欧美成人精品3d动漫h| 一区二区三区鲁丝不卡| 国产精品综合二区| 制服丝袜av成人在线看| 一区二区在线观看视频| 国产成人免费高清| 日韩欧美一区在线| 午夜伦理一区二区| 91色乱码一区二区三区| 国产网红主播福利一区二区| 蜜桃一区二区三区在线| 在线观看91视频| 成人欧美一区二区三区视频网页| 久久超级碰视频| 欧美精品久久天天躁| 亚洲综合在线免费观看| 成人av免费网站| 久久精品视频在线免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 色88888久久久久久影院按摩| 中文字幕在线不卡| 成人午夜av电影| 国产亚洲综合av| 久久精品国产一区二区| 欧美一区二区三区免费观看视频| 一区二区在线观看视频| 99精品视频中文字幕| 国产女人水真多18毛片18精品视频| 理论电影国产精品| 亚洲一区二区三区在线| 欧美无砖专区一中文字| 亚洲人123区| 日本高清不卡一区| 一二三四区精品视频| 日本久久一区二区三区| 一片黄亚洲嫩模| 欧美性生活久久| 婷婷六月综合亚洲| 欧美精品在线观看播放| 日韩黄色片在线观看| 5858s免费视频成人| 青青草97国产精品免费观看无弹窗版 | 日韩福利电影在线观看| 91精品久久久久久蜜臀| 日韩av中文字幕一区二区 | 亚洲欧洲中文日韩久久av乱码| 成人app在线观看| 亚洲免费成人av| 欧美日韩一区二区电影| 日本女优在线视频一区二区| 欧美一区二区三区喷汁尤物| 激情综合网最新| 国产视频一区在线观看| 99视频精品全部免费在线| 亚洲天堂网中文字| 欧美日本不卡视频| 久久成人18免费观看| 国产精品少妇自拍| 一本久久精品一区二区| 三级欧美韩日大片在线看| 精品精品欲导航| 99久久99久久精品免费看蜜桃| 亚洲激情六月丁香| 91麻豆精品国产无毒不卡在线观看| 欧美精品久久久久久久多人混战| 日韩精品一二三| 欧美精品一区二区在线播放| av一区二区三区四区| 亚洲444eee在线观看| 欧美不卡一区二区三区四区| 丁香婷婷深情五月亚洲| 一区二区高清免费观看影视大全| 欧美一区二区视频免费观看| 国产精品一二一区| 亚洲一区二区在线观看视频| 91精品国产91久久久久久最新毛片| 国产精品自在在线| 亚洲一二三区不卡| 久久久久久久久久美女| 色又黄又爽网站www久久| 久久精品国产一区二区三区免费看| 国产女同互慰高潮91漫画| 欧美三级中文字幕在线观看| 九九国产精品视频| 亚洲美女淫视频| 精品精品欲导航| 欧美无砖专区一中文字| 国产精品一区二区三区网站| 亚洲成人第一页| 亚洲国产精品激情在线观看| 欧美精品丝袜久久久中文字幕| 国产河南妇女毛片精品久久久| 一级中文字幕一区二区| 久久精品欧美日韩| 91麻豆精品国产91久久久使用方法 | 精品国产青草久久久久福利| 一本色道亚洲精品aⅴ| 国产美女久久久久| 青青草97国产精品免费观看 |