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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chull.c

?? 是Computational Geometry in C中的原程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
   while ( faces && faces->visible ) {       f = faces;      DELETE( faces, f );   }   f = faces->next;   do {      if ( f->visible ) {	 t = f;	 f = f->next;	 DELETE( faces, t );      }      else f = f->next;   } while ( f != faces );}/*---------------------------------------------------------------------CleanVertices runs through the vertex list and deletes the vertices that are marked as processed but are not incident to any undeleted edges. The pointer to vnext, pvnext, is used to alter vnext inConstructHull() if we are about to delete vnext.---------------------------------------------------------------------*/void	CleanVertices( tVertex *pvnext ){   tEdge    e;   tVertex  v, t;	   /* Mark all vertices incident to some undeleted edge as on the hull. */   e = edges;   do {      e->endpts[0]->onhull = e->endpts[1]->onhull = ONHULL;      e = e->next;   } while (e != edges);	   /* Delete all vertices that have been processed but      are not on the hull. */   while ( vertices && vertices->mark && !vertices->onhull ) {       /* If about to delete vnext, advance it first. */      if ( v == *pvnext )         *pvnext = v->next;      v = vertices;      DELETE( vertices, v );   }   v = vertices->next;   do {      if ( v->mark && !v->onhull ) {    	 t = v; 	 v = v->next;	 DELETE( vertices, t )      }      else v = v->next;   } while ( v != vertices );	   /* Reset flags. */   v = vertices;   do {      v->duplicate = NULL;       v->onhull = !ONHULL;       v = v->next;   } while ( v != vertices );}/*---------------------------------------------------------------------Collinear checks to see if the three points given are collinear,by checking to see if each element of the cross product is zero.---------------------------------------------------------------------*/bool	Collinear( tVertex a, tVertex b, tVertex c ){   return          ( c->v[Z] - a->v[Z] ) * ( b->v[Y] - a->v[Y] ) -         ( b->v[Z] - a->v[Z] ) * ( c->v[Y] - a->v[Y] ) == 0      && ( b->v[Z] - a->v[Z] ) * ( c->v[X] - a->v[X] ) -         ( b->v[X] - a->v[X] ) * ( c->v[Z] - a->v[Z] ) == 0      && ( b->v[X] - a->v[X] ) * ( c->v[Y] - a->v[Y] ) -         ( b->v[Y] - a->v[Y] ) * ( c->v[X] - a->v[X] ) == 0  ;}/*---------------------------------------------------------------------Consistency runs through the edge list and checks that alladjacent faces have their endpoints in opposite order.  This verifiesthat the vertices are in counterclockwise order.---------------------------------------------------------------------*/void	Consistency( void ){   register tEdge  e;   register int    i, j;   e = edges;   do {      /* find index of endpoint[0] in adjacent face[0] */      for ( i = 0; e->adjface[0]->vertex[i] != e->endpts[0]; ++i )	 ;         /* find index of endpoint[0] in adjacent face[1] */      for ( j = 0; e->adjface[1]->vertex[j] != e->endpts[0]; ++j )	 ;      /* check if the endpoints occur in opposite order */      if ( !( e->adjface[0]->vertex[ (i+1) % 3 ] ==	      e->adjface[1]->vertex[ (j+2) % 3 ] ||	      e->adjface[0]->vertex[ (i+2) % 3 ] ==	      e->adjface[1]->vertex[ (j+1) % 3 ] )  )	 break;      e = e->next;   } while ( e != edges );   if ( e != edges )      fprintf( stderr, "Checks: edges are NOT consistent.\n");   else      fprintf( stderr, "Checks: edges consistent.\n");}/*---------------------------------------------------------------------Convexity checks that the volume between every face and everypoint is negative.  This shows that each point is inside every faceand therefore the hull is convex.---------------------------------------------------------------------*/void	Convexity( void ){   register tFace    f;   register tVertex  v;   int               vol;   f = faces;      do {      v = vertices;      do {	 if ( v->mark ) {	    vol = VolumeSign( f, v );	    if ( vol < 0 )	       break;	 }	 v = v->next;      } while ( v != vertices );      f = f->next;   } while ( f != faces );   if ( f != faces )      fprintf( stderr, "Checks: NOT convex.\n");   else if ( check )       fprintf( stderr, "Checks: convex.\n");}/*---------------------------------------------------------------------CheckEuler checks Euler's relation, as well as its implications whenall faces are known to be triangles.  Only prints positive informationwhen debug is true, but always prints negative information.---------------------------------------------------------------------*/void	CheckEuler( int V, int E, int F ){   if ( check )      fprintf( stderr, "Checks: V, E, F = %d %d %d:\t", V, E, F);   if ( (V - E + F) != 2 )      fprintf( stderr, "Checks: V-E+F != 2\n");   else if ( check )      fprintf( stderr, "V-E+F = 2\t");   if ( F != (2 * V - 4) )      fprintf( stderr, "Checks: F=%d != 2V-4=%d; V=%d\n",	      F, 2*V-4, V);   else if ( check )       fprintf( stderr, "F = 2V-4\t");      if ( (2 * E) != (3 * F) )      fprintf( stderr, "Checks: 2E=%d != 3F=%d; E=%d, F=%d\n",	      2*E, 3*F, E, F );   else if ( check )       fprintf( stderr, "2E = 3F\n");}/*-------------------------------------------------------------------*/void	Checks( void ){   tVertex  v;   tEdge    e;   tFace    f;   int 	   V = 0, E = 0 , F = 0;   Consistency();   Convexity();   if ( v = vertices )      do {         if (v->mark) V++;	 v = v->next;      } while ( v != vertices );   if ( e = edges )      do {         E++;	 e = e->next;      } while ( e != edges );   if ( f = faces )      do {         F++;	 f  = f ->next;      } while ( f  != faces );   CheckEuler( V, E, F );   CheckEndpts();}/*===================================================================These functions are used whenever the debug flag is set.They print out the entire contents of each data structure.  Printing is to standard error.  To grab the output in a file in the csh, use this:	chull < i.file >&! o.file=====================================================================*//*-------------------------------------------------------------------*/void	PrintOut( tVertex v ){   fprintf( stderr, "\nHead vertex %d = %6x :\n", v->vnum, v );   PrintVertices();   PrintEdges();   PrintFaces();}/*-------------------------------------------------------------------*/void	PrintVertices( void ){   tVertex  temp;   temp = vertices;   fprintf (stderr, "Vertex List\n");   if (vertices) do {      fprintf(stderr,"  addr %6x\t", vertices );      fprintf(stderr,"  vnum %4d", vertices->vnum );      fprintf(stderr,"   (%6d,%6d,%6d)",vertices->v[X],	      vertices->v[Y], vertices->v[Z] );      fprintf(stderr,"   active:%3d", vertices->onhull );      fprintf(stderr,"   dup:%5x", vertices->duplicate );      fprintf(stderr,"   mark:%2d\n", vertices->mark );      vertices = vertices->next;   } while ( vertices != temp );}/*-------------------------------------------------------------------*/void	PrintEdges( void ){   tEdge  temp;   int 	  i;	   temp = edges;   fprintf (stderr, "Edge List\n");   if (edges) do {      fprintf( stderr, "  addr: %6x\t", edges );      fprintf( stderr, "adj: ");      for (i=0; i<2; ++i) 	 fprintf( stderr, "%6x", edges->adjface[i] );      fprintf( stderr, "  endpts:");      for (i=0; i<2; ++i) 	 fprintf( stderr, "%4d", edges->endpts[i]->vnum);      fprintf( stderr, "  del:%3d\n", edges->delete );      edges = edges->next;    } while (edges != temp );}/*-------------------------------------------------------------------*/void	PrintFaces( void ){   int 	  i;   tFace  temp;   temp = faces;   fprintf (stderr, "Face List\n");   if (faces) do {      fprintf(stderr, "  addr: %10x  ", faces );      fprintf(stderr, "  edges:");      for( i=0; i<3; ++i )	 fprintf(stderr, "%10x ", faces->edge[i] );      fprintf(stderr, "  vert:");      for ( i=0; i<3; ++i)	 fprintf(stderr, "%4d", faces->vertex[i]->vnum );      fprintf(stderr, "  vis: %d\n", faces->visible );      faces= faces->next;   } while ( faces != temp );}/*-------------------------------------------------------------------Checks that, for each face, for each i={0,1,2}, the [i]th vertex ofthat face is either the [0]th or [1]st endpoint of the [ith] edge ofthe face.-------------------------------------------------------------------*/void	CheckEndpts ( void ){   int 	   i;   tFace   fstart;   tEdge   e;   tVertex v;   bool error = FALSE;   fstart = faces;   if (faces) do {      for( i=0; i<3; ++i ) {         v = faces->vertex[i];         e = faces->edge[i];         if ( v != e->endpts[0] && v != e->endpts[1] ) {            error = TRUE;            fprintf(stderr,"CheckEndpts: Error!\n");            fprintf(stderr,"  addr: %8x;", faces );            fprintf(stderr,"  edges:");            fprintf(stderr,"(%3d,%3d)",                e->endpts[0]->vnum,               e->endpts[1]->vnum);            fprintf(stderr,"\n");         }      }      faces= faces->next;   } while ( faces != fstart );   if ( error )     fprintf(stderr,"Checks: ERROR found and reported above.\n");   else     fprintf(stderr,"Checks: All endpts of all edges of all faces check.\n");}/*------------------------------------------------------------------  EdgeOrderOnFaces: puts e0 between v0 and v1, e1 between v1 and v2,  e2 between v2 and v0 on each face.  This should be unnecessary, alas.  Not used in code, but useful for other purposes.------------------------------------------------------------------*/void    EdgeOrderOnFaces ( void ) {  tFace f = faces;  tEdge new;  int i,j;  do {    for (i = 0; i < 3; i++) {      if (!(((f->edge[i]->endpts[0] == f->vertex[i]) &&             (f->edge[i]->endpts[1] == f->vertex[(i+1)%3])) ||            ((f->edge[i]->endpts[1] == f->vertex[i]) &&             (f->edge[i]->endpts[0] == f->vertex[(i+1)%3])))) {        /* Change the order of the edges on the face: */        for (j = 0; j < 3; j ++) {          /* find the edge that should be there */          if (((f->edge[j]->endpts[0] == f->vertex[i]) &&               (f->edge[j]->endpts[1] == f->vertex[(i+1)%3])) ||              ((f->edge[j]->endpts[1] == f->vertex[i]) &&               (f->edge[j]->endpts[0] == f->vertex[(i+1)%3]))) {            /* Swap it with the one erroneously put into its place: */            if ( debug )            fprintf(stderr,              "Making a swap in EdgeOrderOnFaces: F(%d,%d,%d): e[%d] and e[%d]\n",                    f->vertex[0]->vnum,                    f->vertex[1]->vnum,                    f->vertex[2]->vnum,                    i, j);            new = f->edge[i];            f->edge[i] = f->edge[j];            f->edge[j] = new;          }        }      }    }    f = f->next;  } while (f != faces);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蝌蚪porny| 色综合久久88色综合天天 | 丁香婷婷深情五月亚洲| 日韩不卡一二三区| 日产国产欧美视频一区精品| 五月天一区二区| 亚洲国产成人av好男人在线观看| 亚洲欧美视频在线观看视频| 亚洲图片你懂的| 亚洲激情六月丁香| 亚洲国产中文字幕| 日本亚洲最大的色成网站www| 免费成人在线播放| 国产成人鲁色资源国产91色综| 国产精品1区2区3区在线观看| 国产一区二区三区在线观看精品 | 欧美日韩一区中文字幕| 精品视频一区三区九区| 欧美日韩国产高清一区二区| 欧美猛男超大videosgay| 欧美一区二区在线免费播放| 精品国偷自产国产一区| 国产精品久久久久久久浪潮网站| 亚洲色图欧洲色图婷婷| 日韩和欧美一区二区三区| 青青青伊人色综合久久| 国产91精品一区二区麻豆亚洲| 播五月开心婷婷综合| 欧美色图激情小说| 精品国内片67194| 亚洲人妖av一区二区| 日本特黄久久久高潮| 国产激情91久久精品导航| 色噜噜狠狠色综合中国| 日韩手机在线导航| 国产精品初高中害羞小美女文| 手机精品视频在线观看| 国产不卡视频在线观看| 欧美日韩精品综合在线| 中文字幕va一区二区三区| 午夜不卡在线视频| 成人性生交大片| 欧美一区二区在线免费播放| 亚洲欧洲在线观看av| 麻豆中文一区二区| 色悠久久久久综合欧美99| 日韩欧美国产wwwww| 亚洲欧美偷拍卡通变态| 国产精品一区二区在线看| 欧美日韩在线播放一区| 日韩一区中文字幕| 韩国女主播成人在线| 欧美精品视频www在线观看| 欧美高清一级片在线观看| 奇米影视一区二区三区小说| 色噜噜狠狠一区二区三区果冻| 国产日韩欧美一区二区三区乱码 | 国产精品综合一区二区三区| 欧美日韩中文国产| 亚洲视频一区二区免费在线观看| 久久99国产精品免费| 欧美日韩国产高清一区| 一区av在线播放| 不卡的av电影| 国产日韩欧美制服另类| 国产主播一区二区| 精品成人一区二区三区| 久久99久久久欧美国产| 日韩欧美一级二级三级| 日韩福利电影在线| 在线不卡一区二区| 无码av免费一区二区三区试看| 色哟哟一区二区在线观看| 国产精品另类一区| 成人免费视频一区| 国产精品久久久久桃色tv| 成人美女视频在线观看18| 亚洲国产精品传媒在线观看| 国产精品一区二区三区乱码| 久久综合狠狠综合久久综合88| 六月丁香婷婷色狠狠久久| 3d成人动漫网站| 免费成人在线观看| 2020国产成人综合网| 国产一区二区三区高清播放| 国产香蕉久久精品综合网| 成人午夜碰碰视频| 亚洲欧美经典视频| 欧美日韩一区二区三区在线看 | 久久久久久亚洲综合| 国产成人亚洲综合a∨婷婷| 国产日韩欧美激情| 91视频免费看| 婷婷成人综合网| 欧美一级日韩不卡播放免费| 久久国产夜色精品鲁鲁99| 国产亚洲欧美在线| 91在线视频播放| 亚洲成人av电影在线| 欧美成人一区二区三区片免费| 狠狠色狠狠色综合| 国产精品久久久久一区| 在线观看一区日韩| 韩国av一区二区三区在线观看| 国产欧美日韩久久| 欧美三级日本三级少妇99| 久久99久久99小草精品免视看| 国产欧美日韩综合精品一区二区 | 正在播放亚洲一区| 国产99久久久国产精品潘金网站| 最新国产の精品合集bt伙计| 91精品国产色综合久久| 成人app下载| 人人爽香蕉精品| 中文字幕制服丝袜成人av| 制服丝袜在线91| 99re在线精品| 韩国av一区二区三区在线观看| 一区二区三区在线免费播放| 久久一夜天堂av一区二区三区| 色偷偷久久人人79超碰人人澡| 久久国产欧美日韩精品| 一区二区三区在线观看视频| 久久综合国产精品| 欧美亚日韩国产aⅴ精品中极品| 狠狠狠色丁香婷婷综合激情 | 91精品国产综合久久久久久久久久 | 欧美色视频在线观看| 国产福利一区二区三区视频| 亚洲不卡一区二区三区| 亚洲私人黄色宅男| 久久青草国产手机看片福利盒子 | 亚洲视频1区2区| 精品乱人伦小说| 日本久久精品电影| 丁香婷婷综合激情五月色| 久久99精品久久只有精品| 亚洲v中文字幕| 夜夜揉揉日日人人青青一国产精品 | 欧美色综合网站| 97精品久久久午夜一区二区三区 | 国产日韩视频一区二区三区| 日韩一区二区三区观看| 欧洲av在线精品| 色哟哟在线观看一区二区三区| 国产传媒久久文化传媒| 国产真实精品久久二三区| 麻豆国产91在线播放| 日韩av在线发布| 天天操天天综合网| 亚洲高清视频在线| 亚洲成av人片| 懂色一区二区三区免费观看| 麻豆一区二区三区| 亚洲欧美日韩人成在线播放| 精品卡一卡二卡三卡四在线| 中文字幕乱码一区二区免费| 日韩午夜精品视频| 色综合久久久久网| 成人黄色电影在线| 国产偷v国产偷v亚洲高清| 91精品国产欧美一区二区| 欧美极品aⅴ影院| 国产精品视频免费| 1000部国产精品成人观看| 亚洲一区二区在线免费观看视频| 美女一区二区在线观看| 在线精品视频一区二区三四 | 黄页视频在线91| 一本到不卡精品视频在线观看| 日韩一区二区三区av| 国产精品免费观看视频| 老司机精品视频线观看86| 在线观看日韩电影| 最新国产の精品合集bt伙计| 国产一区二区精品在线观看| 国产成人在线视频网址| 欧美三级视频在线播放| 亚洲视频在线观看一区| 99在线视频精品| 亚洲欧美日韩在线不卡| 成人深夜在线观看| 久久久久国产精品人| 精品一区二区久久| 国产女人18水真多18精品一级做| 日韩经典一区二区| 日韩精品一区二区三区老鸭窝| 视频一区二区不卡| 日韩欧美国产1| 99视频一区二区| 日韩一区二区三| 免费在线一区观看| 久久精品男人的天堂| 欧美日韩一区成人| 韩国毛片一区二区三区| 亚洲综合精品自拍| 久久一区二区三区四区| 丁香六月久久综合狠狠色| 国产精品不卡一区二区三区| 欧洲亚洲国产日韩|