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

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

?? qhull.c

?? 關于網格剖分的
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*<html><pre>  -<a                             href="qh-c.htm#qhull"
  >-------------------------------</a><a name="TOP">-</a>

   qhull.c
   Quickhull algorithm for convex hulls

   qhull() and top-level routines

   see qh-c.htm, qhull.h, unix.c

   see qhull_a.h for internal functions

   copyright (c) 1993-1999 The Geometry Center        
*/

#include "qhull_a.h" 

/*============= functions in alphabetic order after qhull() =======*/

/*-<a                             href="qh-c.htm#qhull"
  >-------------------------------</a><a name="qhull">-</a>
  
  qh_qhull()
    compute DIM3 convex hull of qh.num_points starting at qh.first_point
    qh contains all global options and variables

  returns:
    returns polyhedron
      qh.facet_list, qh.num_facets, qh.vertex_list, qh.num_vertices,
    
    returns global variables
      qh.hulltime, qh.max_outside, qh.interior_point, qh.max_vertex, qh.min_vertex
    
    returns precision constants
      qh.ANGLEround, centrum_radius, cos_max, DISTround, MAXabs_coord, ONEmerge

  notes:
    unless needed for output
      qh.max_vertex and qh.min_vertex are max/min due to merges
      
  see:
    to add individual points to either qh.num_points
      use qh_addpoint()
      
    if qh.GETarea
      qh_produceoutput() returns qh.totarea and qh.totvol via qh_getarea()

  design:
    record starting time
    initialize hull and partition points
    build convex hull
    unless early termination
      update facet->maxoutside for vertices, coplanar, and near-inside points
    error if temporary sets exist
    record end time
*/
void qh_qhull (void) {
  int numoutside;

  qh hulltime= qh_CPUclock;
  if (qh RERUN || qh JOGGLEmax < REALmax/2) 
    qh_build_withrestart();
  else {
    qh_initbuild();
    qh_buildhull();
  }
  if (!qh STOPpoint && !qh STOPcone) {
    if (qh ZEROall_ok && !qh TESTvneighbors && qh MERGEexact)
      qh_checkzero( qh_ALL);
    if (qh ZEROall_ok && !qh TESTvneighbors && !qh WAScoplanar) {
      trace2((qh ferr, "qh_qhull: all facets are clearly convex and no coplanar points.  Post-merging and check of maxout not needed.\n"));
    }else {
      if (qh MERGEexact || (qh hull_dim > qh_DIMreduceBuild && qh PREmerge))
        qh_postmerge ("First post-merge", qh premerge_centrum, qh premerge_cos, 
             (qh POSTmerge ? False : qh TESTvneighbors));
      else if (!qh POSTmerge && qh TESTvneighbors) 
        qh_postmerge ("For testing vertex neighbors", qh premerge_centrum,
             qh premerge_cos, True); 
      if (qh POSTmerge)
        qh_postmerge ("For post-merging", qh postmerge_centrum, 
             qh postmerge_cos, qh TESTvneighbors);
      if (qh visible_list == qh facet_list) { /* i.e., merging done */
        qh findbestnew= True;
        qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numoutside);
        qh findbestnew= False;
        qh_deletevisible (/*qh visible_list*/);
        qh_resetlists (False /*qh visible_list newvertex_list newfacet_list */);
      }
      if (qh DOcheckmax){
	if (qh REPORTfreq) {
	  qh_buildtracing (NULL, NULL); 
	  fprintf (qh ferr, "\nTesting all coplanar points.\n");
	}
	qh_check_maxout();
      }
    }
  }
  if (qh KEEPnearinside && !qh maxoutdone)  
    qh_nearcoplanar();
  if (qh_setsize ((setT*)qhmem.tempstack) != 0) {
    fprintf (qh ferr, "qhull internal error (qh_qhull): temporary sets not empty (%d)\n",
	     qh_setsize ((setT*)qhmem.tempstack));
    qh_errexit (qh_ERRqhull, NULL, NULL);
  }
  qh hulltime= qh_CPUclock - qh hulltime;
  qh QHULLfinished= True;
  trace1((qh ferr, "qh_qhull: algorithm completed\n"));
} /* qhull */

/*-<a                             href="qh-c.htm#qhull"
  >-------------------------------</a><a name="addpoint">-</a>
  
  qh_addpoint( furthest, facet, checkdist )
    add point (usually furthest point) above facet to hull 
    if checkdist, 
      check that point is above facet.
      if point is not outside of the hull, uses qh_partitioncoplanar()
    else if facet specified,
      assumes that point is above facet (major damage if below)
    for Delaunay triangulations, 
      Use qh_setdelaunay() to lift point to paraboloid and scale by 'Qbb' if needed
      Do not use options 'Qbk', 'QBk', or 'QbB' since they scale the coordinates. 

  returns:
    returns False if user requested an early termination
     qh.visible_list, newfacet_list, delvertex_list, NEWfacets may be defined
    updates qh.facet_list, qh.num_facets, qh.vertex_list, qh.num_vertices
    clear qh.maxoutdone (will need to call qh_check_maxout() for facet->maxoutside)
    if unknown point, adds a pointer to qh.other_points
      do not deallocate the point's coordinates
  
  notes:
    uses qh.visible_list, qh.newfacet_list, qh.delvertex_list, qh.NEWfacets

  design:
    check point in qh.first_point/.num_points
    if checkdist
      if point not above facet
        partition coplanar point 
        exit
    exit if pre STOPpoint requested
    find horizon and visible facets for point
    make new facets for point to horizon
    make hyperplanes for point
    compute balance statistics
    match neighboring new facets
    update vertex neighbors and delete interior vertices
    exit if STOPcone requested
    merge non-convex new facets
    check for using qh_findbestnew() instead of qh_findbest()
    partition outside points from visible facets
    delete visible facets
    check polyhedron if requested
    exit if post STOPpoint requested
    reset working lists of facets and vertices
*/
boolT qh_addpoint (pointT *furthest, facetT *facet, boolT checkdist) {
  int goodvisible, goodhorizon;
  vertexT *vertex;
  facetT *newfacet;
  realT dist, newbalance, pbalance;
  boolT isoutside= False;
  int numpart, numpoints, numnew, firstnew;

  qh maxoutdone= False;
  if (qh_pointid (furthest) == -1)
    qh_setappend (&qh other_points, furthest);
  if (!facet) {
    fprintf (qh ferr, "qh_addpoint: NULL facet.  Use qh_findbestfacet\n");
    qh_errexit (qh_ERRqhull, NULL, NULL);
  }
  if (checkdist) {
    facet= qh_findbest (furthest, facet, !qh_ALL, False, !qh_NOupper,
			&dist, &isoutside, &numpart);
    zzadd_(Zpartition, numpart);
    if (!isoutside) {
      zinc_(Znotmax);  /* last point of outsideset is no longer furthest. */
      facet->notfurthest= True;
      qh_partitioncoplanar (furthest, facet, &dist);
      return True;
    }
  }
  qh_buildtracing (furthest, facet);
  if (qh STOPpoint < 0 && qh furthest_id == -qh STOPpoint-1) {
    facet->notfurthest= True;
    return False;
  }
  qh_findhorizon (furthest, facet, &goodvisible, &goodhorizon); 
  if (qh ONLYgood && !(goodvisible+goodhorizon) && !qh GOODclosest) {
    zinc_(Znotgood);  
    facet->notfurthest= True;
    /* last point of outsideset is no longer furthest.  This is ok
       since all points of the outside are likely to be bad */
    qh_resetlists (False /*qh visible_list newvertex_list newfacet_list */);
    return True;
  }
  zzinc_(Zprocessed);
  firstnew= qh facet_id;
  vertex= qh_makenewfacets (furthest /*visible_list, attaches if !ONLYgood */);
  qh_makenewplanes (/* newfacet_list */);
  numnew= qh facet_id - firstnew;
  newbalance= numnew - (realT) (qh num_facets-qh num_visible)
                         * qh hull_dim/qh num_vertices;
  wadd_(Wnewbalance, newbalance);
  wadd_(Wnewbalance2, newbalance * newbalance);
  if (qh ONLYgood 
  && !qh_findgood (qh newfacet_list, goodhorizon) && !qh GOODclosest) {
    FORALLnew_facets 
      qh_delfacet (newfacet);
    qh_delvertex (vertex);
    qh_resetlists (True /*qh visible_list newvertex_list newfacet_list */);
    zinc_(Znotgoodnew);
    facet->notfurthest= True;
    return True;
  }
  if (qh ONLYgood)
    qh_attachnewfacets(/*visible_list*/);
  qh_matchnewfacets();
  qh_updatevertices();
  if (qh STOPcone && qh furthest_id == qh STOPcone-1) {
    facet->notfurthest= True;
    return False;  /* visible_list etc. still defined */
  }
  if (qh PREmerge || qh MERGEexact) {
    qh_premerge (vertex, qh premerge_centrum, qh premerge_cos);
    if (zzval_(Ztotmerge) > qh_USEfindbestnew)
      qh findbestnew= True;
    else {
      FORALLnew_facets {
	if (!newfacet->simplicial) {
	  qh findbestnew= True;  /* use qh_findbestnew instead of qh_findbest*/
	  break;
	}
      }
    }
  }else if (qh BESToutside)
    qh findbestnew= True;
  qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numpoints);
  qh findbestnew= False;
  qh findbest_notsharp= False;
  zinc_(Zpbalance);
  pbalance= numpoints - (realT) qh hull_dim /* assumes all points extreme */
                * (qh num_points - qh num_vertices)/qh num_vertices;
  wadd_(Wpbalance, pbalance);
  wadd_(Wpbalance2, pbalance * pbalance);
  qh_deletevisible (/*qh visible_list*/);
  zmax_(Zmaxvertex, qh num_vertices);
  qh NEWfacets= False;
  if (qh IStracing >= 4)
    qh_printfacetlist (qh newfacet_list, NULL, True);
  if (qh CHECKfrequently) {
    if (qh num_facets < 50)
      qh_checkpolygon (qh facet_list);
    else
      qh_checkpolygon (qh newfacet_list);
  }
  if (qh STOPpoint > 0 && qh furthest_id == qh STOPpoint-1) 
    return False; 
  qh_resetlists (True /*qh visible_list newvertex_list newfacet_list */);
  trace2((qh ferr, "qh_addpoint: added p%d new facets %d new balance %2.2g point balance %2.2g\n",
    qh_pointid (furthest), numnew, newbalance, pbalance));
  if (qh hull_dim > 3 && qh TRACEpoint == qh_pointid (furthest)) {
    qh IStracing= 0;
    qhmem.IStracing= 0;
  }
  return True;
} /* addpoint */

/*-<a                             href="qh-c.htm#qhull"
  >-------------------------------</a><a name="build_withrestart">-</a>
  
  qh_build_withrestart()
    allow restarts due to qh.JOGGLEmax while calling qh_buildhull()
    qh.FIRSTpoint/qh.NUMpoints is point array
        it may be moved by qh_joggleinput()
*/
void qh_build_withrestart (void) {
  int restart;

  qh ALLOWrestart= True;
  while (True) {
    restart= setjmp (qh restartexit); /* simple statement for CRAY J916 */
    if (restart) {       /* only from qh_precision() */
      zzinc_(Zretry);
      wmax_(Wretrymax, qh JOGGLEmax);
      qh ERREXITcalled= False;
      qh STOPcone= True; /* if break, prevents normal output */
    }
    if (!qh RERUN && qh JOGGLEmax < REALmax/2) {
      if (qh build_cnt > qh_JOGGLEmaxretry) {
	fprintf(qh ferr, "\n\
qhull precision error: %d attempts to construct a convex hull\n\
        with joggled input.  Increase joggle above 'QJ%2.2g'\n\
	or modify qh_JOGGLE... parameters in user.h\n",
	   qh build_cnt, qh JOGGLEmax);
	qh_errexit (qh_ERRqhull, NULL, NULL);
      }
      if (qh build_cnt && !restart)
	break;
    }else if (qh build_cnt && qh build_cnt >= qh RERUN)
      break;
    qh STOPcone= False;
    qh_freebuild (True);  /* first call is a nop */
    qh build_cnt++;
    if (!qh qhull_optionsiz)
      qh qhull_optionsiz= strlen (qh qhull_options);
    else { 
      qh qhull_options [qh qhull_optionsiz]= '\0';
      qh qhull_optionlen= 80;
    }
    qh_option("_run", &qh build_cnt, NULL);
    if (qh build_cnt == qh RERUN) {
      qh IStracing= qh TRACElastrun;  /* duplicated from qh_initqhull_globals */
      if (qh TRACEpoint != -1 || qh TRACEdist < REALmax/2 || qh TRACEmerge) {
        qh TRACElevel= (qh IStracing? qh IStracing : 3);
        qh IStracing= 0;
      }
      qhmem.IStracing= qh IStracing;
    }
    if (qh JOGGLEmax < REALmax/2)
      qh_joggleinput();
    qh_initbuild();
    qh_buildhull();
    if (qh JOGGLEmax < REALmax/2 && !qh MERGING)
      qh_checkconvex (qh facet_list, qh_ALGORITHMfault);
  }
  qh ALLOWrestart= False;
} /* qh_build_withrestart */

/*-<a                             href="qh-c.htm#qhull"
  >-------------------------------</a><a name="buildhull">-</a>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲线精品一区二区三区八戒| 国产精品综合视频| 国产成人在线色| 中文字幕在线一区二区三区| 亚洲一区二区三区四区的| 6080yy午夜一二三区久久| 青草av.久久免费一区| 精品国产乱码久久久久久1区2区| 国产乱一区二区| 麻豆精品视频在线观看视频| 欧美国产综合色视频| 91亚洲永久精品| 蜜臀av性久久久久蜜臀av麻豆| 午夜精品福利在线| 久久精品综合网| 欧美三级视频在线| 国产真实乱子伦精品视频| 国产精品欧美久久久久无广告| 欧美成人高清电影在线| 91免费观看在线| 欧美亚洲动漫精品| 国产乱码字幕精品高清av| 风间由美一区二区三区在线观看| 亚洲一区免费在线观看| 婷婷综合在线观看| 激情亚洲综合在线| 国产不卡视频在线观看| 色婷婷综合久久久中文一区二区| 日产国产高清一区二区三区 | 亚洲精品伦理在线| 久久久综合九色合综国产精品| 欧美亚洲动漫精品| 亚洲精品在线免费观看视频| 国产精品萝li| 日韩电影免费一区| 成人一区在线看| 国产精品99久久久久久久vr | 污片在线观看一区二区| 久久精品国产久精国产| 首页国产丝袜综合| 亚洲一区二区精品久久av| 毛片一区二区三区| 色婷婷综合视频在线观看| 日韩一区二区在线播放| 这里是久久伊人| 国产精品理论在线观看| 日韩高清中文字幕一区| 成人高清视频在线观看| 成人免费精品视频| 欧美一区二区福利在线| 欧美一区二区三区在线视频| 中文字幕免费不卡在线| 日本成人中文字幕| 欧美视频一区二区三区四区| 国产精品久久毛片| 韩国女主播一区二区三区| 欧美日韩国产综合草草| 91麻豆国产自产在线观看| 欧美v日韩v国产v| 天天av天天翘天天综合网 | 欧美日韩亚洲不卡| 最新国产成人在线观看| 亚洲精品成人在线| 成人综合在线观看| 26uuu另类欧美亚洲曰本| 国产亚洲精品福利| 精品影视av免费| bt欧美亚洲午夜电影天堂| 在线视频观看一区| 欧美大度的电影原声| 中文字幕精品一区二区精品绿巨人| 欧美a一区二区| 91精品视频网| 青青草伊人久久| 91麻豆精品国产91久久久使用方法| 亚洲免费看黄网站| 国产一区二区精品久久| 色呦呦国产精品| 亚洲精品乱码久久久久久久久| 99久久er热在这里只有精品66| 在线观看91精品国产麻豆| 国产三区在线成人av| 国产高清不卡一区二区| 国产欧美视频一区二区| 亚洲成人av电影在线| 成人综合激情网| 亚洲欧美在线视频| 在线免费亚洲电影| 亚洲国产精品麻豆| 欧美日韩aaaaa| 久国产精品韩国三级视频| 日韩欧美色电影| 国产乱码精品一品二品| 国产精品美女久久久久久久| 91免费视频观看| 亚洲3atv精品一区二区三区| 日韩一区二区电影在线| 国产精品538一区二区在线| 中文字幕欧美一| 欧美精品vⅰdeose4hd| 久久av资源站| 亚洲视频免费在线| 欧美精品一卡二卡| 国产美女精品一区二区三区| 成人欧美一区二区三区小说| 欧洲精品一区二区三区在线观看| 三级不卡在线观看| www激情久久| 在线看一区二区| 久久99久久99精品免视看婷婷| 国产精品色一区二区三区| 精品视频在线视频| 国产成人精品免费| 亚洲亚洲人成综合网络| 久久久久亚洲综合| 欧美日韩一级二级| 国产精品乡下勾搭老头1| 亚洲综合激情网| 久久久久久免费网| 欧美日韩久久久久久| 国产电影一区在线| 免费高清在线视频一区·| 中文字幕一区二区三区在线播放 | 国产精品99久久久久久似苏梦涵| 亚洲视频免费观看| 久久久久久久综合狠狠综合| 91国产成人在线| 亚洲国产精品久久久久秋霞影院 | 欧美色综合网站| 成人精品亚洲人成在线| 亚洲一区二区精品3399| 久久久综合视频| 欧美va亚洲va在线观看蝴蝶网| 色狠狠av一区二区三区| voyeur盗摄精品| 国产尤物一区二区| 蜜臀av一区二区在线观看| 亚洲成av人片www| 亚洲综合色丁香婷婷六月图片| 国产精品丝袜在线| 精品成人a区在线观看| 欧美一区二区三级| 欧美疯狂做受xxxx富婆| 91福利精品视频| av欧美精品.com| 国产a视频精品免费观看| 久久99蜜桃精品| 日本成人在线视频网站| 天堂久久一区二区三区| 亚洲一区二区三区四区的| 亚洲精品免费看| 一区二区三区自拍| 精品久久久久久久久久久久包黑料 | 国产精品1区2区3区在线观看| 日本亚洲三级在线| 丝袜亚洲精品中文字幕一区| 午夜精品一区二区三区免费视频| 亚洲色图19p| 亚洲一二三四久久| 天堂资源在线中文精品| 强制捆绑调教一区二区| 久久国产精品72免费观看| 国产一区二区三区精品视频| 国产伦精品一区二区三区免费| 精品综合免费视频观看| 国产91在线观看| 成人高清视频免费观看| 91丨九色丨黑人外教| 欧美亚洲综合另类| 欧美一区二区黄| 久久先锋资源网| 欧美国产乱子伦| 亚洲精选视频在线| 青青草97国产精品免费观看| 精品一区二区在线播放| 波多野洁衣一区| 在线日韩国产精品| 日韩久久精品一区| 亚洲欧美综合另类在线卡通| 亚洲国产日日夜夜| 狠狠狠色丁香婷婷综合久久五月| 国产黄色精品视频| 欧美写真视频网站| 欧美大片在线观看| 中文字幕一区二区三区av| 午夜影院在线观看欧美| 国产精品一区三区| 欧美日韩精品一区二区三区四区| 日韩免费一区二区| 亚洲女人的天堂| 美腿丝袜在线亚洲一区| 成人高清av在线| 欧美日韩国产片| 国产精品嫩草影院av蜜臀| 婷婷成人综合网| 成人免费高清视频在线观看| 5月丁香婷婷综合| 亚洲一区在线观看视频| 国产成人av网站| 日韩三级av在线播放|