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

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

?? poly.c

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

   poly.c 
   implements polygons and simplices

   see qh-c.htm, poly.h and qhull.h

   infrequent code is in poly2.c 
   (all but top 50 and their callers 12/3/95)

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

#include "qhull_a.h"

/*======== functions in alphabetical order ==========*/

/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="appendfacet">-</a>
  
  qh_appendfacet( facet )
    appends facet to end of qh.facet_list,

  returns:
    updates qh.facet_list, facet_tail, newfacet_list, facet_next
    increments qh.numfacets
  
  notes:
    assumes qh.facet_list/facet_tail is defined (createsimplex)

*/
void qh_appendfacet(facetT *facet) {
  facetT *tail= qh facet_tail;

  if (tail == qh newfacet_list)
    qh newfacet_list= facet;
  if (tail == qh facet_next)
    qh facet_next= facet;
  facet->previous= tail->previous;
  facet->next= tail;
  if (tail->previous)
    tail->previous->next= facet;
  else
    qh facet_list= facet;
  tail->previous= facet;
  qh num_facets++;
  trace4((qh ferr, "qh_appendfacet: append f%d to facet_list\n", facet->id));
} /* appendfacet */


/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="appendvertex">-</a>
  
  qh_appendvertex( vertex )
    appends vertex to end of qh.vertex_list,

  returns:
    sets vertex->newlist
    updates qh.vertex_list, vertex_tail, newvertex_list
    increments qh.num_vertices

  notes:
    assumes qh.vertex_list/vertex_tail is defined (createsimplex)

*/
void qh_appendvertex (vertexT *vertex) {
  vertexT *tail= qh vertex_tail;

  if (tail == qh newvertex_list)
    qh newvertex_list= vertex;
  vertex->newlist= True;
  vertex->previous= tail->previous;
  vertex->next= tail;
  if (tail->previous)
    tail->previous->next= vertex;
  else
    qh vertex_list= vertex;
  tail->previous= vertex;
  qh num_vertices++;
  trace4((qh ferr, "qh_appendvertex: append v%d to vertex_list\n", vertex->id));
} /* appendvertex */


/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="attachnewfacets">-</a>
  
  qh_attachnewfacets( )
    attach horizon facets to new facets in qh.newfacet_list
    newfacets have neighbor and ridge links to horizon but not vice versa
    only needed for qh.ONLYgood

  returns:
    set qh.NEWfacets
    horizon facets linked to new facets 
      ridges changed from visible facets to new facets
      simplicial ridges deleted
    qh.visible_list, no ridges valid
    facet->f.replace is a newfacet (if any)

  design:
    delete interior ridges and neighbor sets by
      for each visible, non-simplicial facet
        for each ridge
          if last visit or if neighbor is simplicial
            if horizon neighbor
              delete ridge for horizon's ridge set
            delete ridge
        erase neighbor set
    attach horizon facets and new facets by
      for all new facets
        if corresponding horizon facet is simplicial
          locate corresponding visible facet {may be more than one}
          link visible facet to new facet
          replace visible facet with new facet in horizon
        else it's non-simplicial
          for all visible neighbors of the horizon facet
            link visible neighbor to new facet
            delete visible neighbor from horizon facet
          append new facet to horizon's neighbors
          the first ridge of the new facet is the horizon ridge
          link the new facet into the horizon ridge
*/
void qh_attachnewfacets (void ) {
  facetT *newfacet= NULL, *neighbor, **neighborp, *horizon, *visible;
  ridgeT *ridge, **ridgep;

  qh NEWfacets= True;
  trace3((qh ferr, "qh_attachnewfacets: delete interior ridges\n"));
  qh visit_id++;
  FORALLvisible_facets {
    visible->visitid= qh visit_id;
    if (visible->ridges) {
      FOREACHridge_(visible->ridges) {
	neighbor= otherfacet_(ridge, visible);
	if (neighbor->visitid == qh visit_id
	    || (!neighbor->visible && neighbor->simplicial)) {
	  if (!neighbor->visible)  /* delete ridge for simplicial horizon */
	    qh_setdel (neighbor->ridges, ridge);
	  qh_setfree (&(ridge->vertices)); /* delete on 2nd visit */
	  qh_memfree (ridge, sizeof(ridgeT));
	}
      }
      SETfirst_(visible->ridges)= NULL;
    }
    SETfirst_(visible->neighbors)= NULL;
  }
  trace1((qh ferr, "qh_attachnewfacets: attach horizon facets to new facets\n"));
  FORALLnew_facets {
    horizon= SETfirstt_(newfacet->neighbors, facetT);
    if (horizon->simplicial) {
      visible= NULL;
      FOREACHneighbor_(horizon) {   /* may have more than one horizon ridge */
	if (neighbor->visible) {
	  if (visible) {
	    if (qh_setequal_skip (newfacet->vertices, 0, horizon->vertices,
				  SETindex_(horizon->neighbors, neighbor))) {
	      visible= neighbor;
	      break;
	    }
	  }else
	    visible= neighbor;
	}
      }
      if (visible) {
	visible->f.replace= newfacet;
	qh_setreplace (horizon->neighbors, visible, newfacet);
      }else {
	fprintf (qh ferr, "qhull internal error (qh_attachnewfacets): couldn't find visible facet for horizon f%d of newfacet f%d\n",
		 horizon->id, newfacet->id);
	qh_errexit2 (qh_ERRqhull, horizon, newfacet);
      }
    }else { /* non-simplicial, with a ridge for newfacet */
      FOREACHneighbor_(horizon) {    /* may hold for many new facets */
	if (neighbor->visible) {
	  neighbor->f.replace= newfacet;
	  qh_setdelnth (horizon->neighbors,
			SETindex_(horizon->neighbors, neighbor));
	  neighborp--; /* repeat */
	}
      }
      qh_setappend (&horizon->neighbors, newfacet);
      ridge= SETfirstt_(newfacet->ridges, ridgeT);
      if (ridge->top == horizon)
	ridge->bottom= newfacet;
      else
	ridge->top= newfacet;
      }
  } /* newfacets */
  if (qh PRINTstatistics) {
    FORALLvisible_facets {
      if (!visible->f.replace) 
	zinc_(Zinsidevisible);
    }
  }
} /* attachnewfacets */

/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="checkflipped">-</a>
  
  qh_checkflipped( facet, dist, allerror )
    checks facet orientation to interior point

    if allerror set,
      tests against qh.DISTround
    else
      tests against 0 since tested against DISTround before

  returns:
    False if it flipped orientation (sets facet->flipped)
    distance if non-NULL
*/
boolT qh_checkflipped (facetT *facet, realT *distp, boolT allerror) {
  realT dist;

  if (facet->flipped && !distp)
    return False;
  zzinc_(Zdistcheck);
  qh_distplane(qh interior_point, facet, &dist);
  if (distp)
    *distp= dist;
  if ((allerror && dist > -qh DISTround)|| (!allerror && dist >= 0.0)) {
    facet->flipped= True;
    zzinc_(Zflippedfacets);
    trace0((qh ferr, "qh_checkflipped: facet f%d is flipped, distance= %6.12g during p%d\n",
              facet->id, dist, qh furthest_id));
    qh_precision ("flipped facet");
    return False;
  }
  return True;
} /* checkflipped */

/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="delfacet">-</a>
  
  qh_delfacet( facet )
    removes facet from facet_list and frees up its memory

  notes:
    assumes vertices and ridges already freed
*/
void qh_delfacet(facetT *facet) {
  void **freelistp; /* used !qh_NOmem */

  trace5((qh ferr, "qh_delfacet: delete f%d\n", facet->id));
  if (facet == qh tracefacet)
    qh tracefacet= NULL;
  if (facet == qh GOODclosest)
    qh GOODclosest= NULL;
  qh_removefacet(facet);
  qh_memfree_(facet->normal, qh normal_size, freelistp);
  if (qh CENTERtype == qh_ASvoronoi) {   /* uses macro calls */
    qh_memfree_(facet->center, qh center_size, freelistp);
  }else /* AScentrum */ {
    qh_memfree_(facet->center, qh normal_size, freelistp);
  }
  qh_setfree(&(facet->neighbors));
  if (facet->ridges)
    qh_setfree(&(facet->ridges));
  qh_setfree(&(facet->vertices));
  if (facet->outsideset)
    qh_setfree(&(facet->outsideset));
  if (facet->coplanarset)
    qh_setfree(&(facet->coplanarset));
  qh_memfree_(facet, sizeof(facetT), freelistp);
} /* delfacet */


/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="deletevisible">-</a>
  
  qh_deletevisible()
    delete visible facets and vertices

  returns:
    deletes each facet and removes from facetlist
    at exit, qh.visible_list empty (== qh.newfacet_list)

  notes:
    ridges already deleted
    horizon facets do not reference facets on qh.visible_list
    new facets in qh.newfacet_list
    uses   qh.visit_id;
*/
void qh_deletevisible (void /*qh visible_list*/) {
  facetT *visible, *nextfacet;
  vertexT *vertex, **vertexp;
  int numvisible= 0, numdel= qh_setsize(qh del_vertices);

  trace1((qh ferr, "qh_deletevisible: delete %d visible facets and %d vertices\n",
         qh num_visible, numdel));
  for (visible= qh visible_list; visible && visible->visible; 
                visible= nextfacet) { /* deleting current */
    nextfacet= visible->next;        
    numvisible++;
    qh_delfacet(visible);
  }
  if (numvisible != qh num_visible) {
    fprintf (qh ferr, "qhull internal error (qh_deletevisible): qh num_visible %d is not number of visible facets %d\n",
             qh num_visible, numvisible);
    qh_errexit (qh_ERRqhull, NULL, NULL);
  }
  qh num_visible= 0;
  zadd_(Zvisfacettot, numvisible);
  zmax_(Zvisfacetmax, numvisible);
  zadd_(Zdelvertextot, numdel);
  zmax_(Zdelvertexmax, numdel);
  FOREACHvertex_(qh del_vertices) 
    qh_delvertex (vertex);
  qh_settruncate (qh del_vertices, 0);
} /* deletevisible */

/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="facetintersect">-</a>
  
  qh_facetintersect( facetA, facetB, skipa, skipB, prepend )
    return vertices for intersection of two simplicial facets
    may include 1 prepended entry (if more, need to settemppush)
    
  returns:
    returns set of qh.hull_dim-1 + prepend vertices
    returns skipped index for each test and checks for exactly one

  notes:
    does not need settemp since set in quick memory
  
  see also:
    qh_vertexintersect and qh_vertexintersect_new
    use qh_setnew_delnthsorted to get nth ridge (no skip information)

  design:
    locate skipped vertex by scanning facet A's neighbors
    locate skipped vertex by scanning facet B's neighbors
    intersect the vertex sets
*/
setT *qh_facetintersect (facetT *facetA, facetT *facetB,
			 int *skipA,int *skipB, int prepend) {
  setT *intersect;
  int dim= qh hull_dim, i, j;
  facetT **neighborsA, **neighborsB;

  neighborsA= SETaddr_(facetA->neighbors, facetT);
  neighborsB= SETaddr_(facetB->neighbors, facetT);
  i= j= 0;
  if (facetB == *neighborsA++)
    *skipA= 0;
  else if (facetB == *neighborsA++)
    *skipA= 1;
  else if (facetB == *neighborsA++)
    *skipA= 2;
  else {
    for (i= 3; i < dim; i++) {
      if (facetB == *neighborsA++) {
        *skipA= i;
        break;
      }
    }
  }
  if (facetA == *neighborsB++)
    *skipB= 0;
  else if (facetA == *neighborsB++)
    *skipB= 1;
  else if (facetA == *neighborsB++)
    *skipB= 2;
  else {
    for (j= 3; j < dim; j++) {
      if (facetA == *neighborsB++) {
        *skipB= j;
        break;
      }
    }
  }
  if (i >= dim || j >= dim) {
    fprintf (qh ferr, "qhull internal error (qh_facetintersect): f%d or f%d not in others neighbors\n",
            facetA->id, facetB->id);
    qh_errexit2 (qh_ERRqhull, facetA, facetB);
  }
  intersect= qh_setnew_delnthsorted (facetA->vertices, qh hull_dim, *skipA, prepend);
  trace4((qh ferr, "qh_facetintersect: f%d skip %d matches f%d skip %d\n",
	  facetA->id, *skipA, facetB->id, *skipB));
  return(intersect);
} /* facetintersect */

/*-<a                             href="qh-c.htm#poly"
  >-------------------------------</a><a name="gethash">-</a>
  
  qh_gethash( hashsize, set, size, firstindex, skipelem )
    return hashvalue for a set with firstindex and skipelem

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线播放一区二区三区| 日韩欧美一级精品久久| 91麻豆精品国产自产在线观看一区| 久久综合久久综合久久综合| 亚洲美女屁股眼交| 成人深夜视频在线观看| 91精品国产综合久久精品app| 国产精品视频一二| 国产精品自拍毛片| 91精品在线观看入口| 亚洲免费看黄网站| 9久草视频在线视频精品| 日韩欧美在线观看一区二区三区| 亚洲黄色尤物视频| 成人免费视频播放| 国产亚洲一本大道中文在线| 免费久久精品视频| 91 com成人网| 日韩在线观看一区二区| 欧美亚洲国产bt| 一二三四社区欧美黄| 一本到不卡精品视频在线观看| 国产精品欧美经典| caoporn国产精品| 国产欧美日韩精品a在线观看| 久久精品国产免费| 欧美成人性福生活免费看| 日韩激情在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 精品久久久久久亚洲综合网| 国产又粗又猛又爽又黄91精品| 欧美日韩国产影片| 亚洲图片欧美一区| 欧美日本视频在线| 蜜桃视频在线一区| 欧美va在线播放| 精品无人码麻豆乱码1区2区 | 亚洲最大色网站| 欧美日韩一级大片网址| 亚洲va天堂va国产va久| 欧美一级片免费看| 精品一区二区免费在线观看| 久久综合久久综合九色| 国产老女人精品毛片久久| 欧美高清在线精品一区| 91美女福利视频| 香港成人在线视频| 日韩欧美第一区| 国产盗摄女厕一区二区三区| 国产精品久久网站| 欧美日韩中文另类| 精品一区精品二区高清| 国产欧美一区二区在线观看| eeuss鲁片一区二区三区在线看| 一区二区三区色| 日韩一区二区三区在线| 国产麻豆成人精品| 亚洲日本va在线观看| 欧美伦理影视网| 国产成人午夜高潮毛片| 亚洲精品菠萝久久久久久久| 在线电影院国产精品| 国产风韵犹存在线视精品| 一区二区三区**美女毛片| 日韩精品在线看片z| 99精品视频在线免费观看| 亚洲国产aⅴ成人精品无吗| 久久网这里都是精品| 色天天综合久久久久综合片| 免费国产亚洲视频| 亚洲欧美日韩国产手机在线 | 日韩精彩视频在线观看| 国产欧美一区二区在线| 欧美日韩国产首页在线观看| 国产91精品精华液一区二区三区| 亚洲乱码中文字幕| 国产亚洲欧美日韩在线一区| 欧美日韩综合色| 不卡的av电影| 狠狠色2019综合网| 午夜视频久久久久久| 国产精品久久久久影院亚瑟| 欧美精品在线一区二区| av激情成人网| 国产精品主播直播| 日韩精品国产精品| 亚洲欧美福利一区二区| 国产日韩影视精品| 欧美成人综合网站| 欧美三区在线视频| 成人一道本在线| 国产真实乱偷精品视频免| 无吗不卡中文字幕| 亚洲综合区在线| 中文字幕在线不卡国产视频| 亚洲精品一线二线三线无人区| 欧美系列日韩一区| 色综合久久综合| 99精品国产一区二区三区不卡| 国产精品一色哟哟哟| 经典三级视频一区| 狠狠色狠狠色综合日日91app| 日韩二区三区在线观看| 午夜私人影院久久久久| 亚洲大片精品永久免费| 亚洲福中文字幕伊人影院| 亚洲视频 欧洲视频| 国产精品国产a| 国产精品视频一区二区三区不卡| 久久亚洲综合色| 久久美女艺术照精彩视频福利播放| 717成人午夜免费福利电影| 91精品1区2区| 欧美日韩亚洲综合| 欧美丰满嫩嫩电影| 91麻豆精品国产91久久久更新时间| 欧美午夜精品理论片a级按摩| 欧美亚洲丝袜传媒另类| 欧美日精品一区视频| 欧美日韩高清一区二区三区| 欧美人与性动xxxx| 91精品综合久久久久久| 日韩一区二区免费视频| 精品剧情v国产在线观看在线| 久久综合色天天久久综合图片| 久久精品一区四区| 国产精品久久久久久久久晋中 | 欧美日韩aaaaa| 欧美一区二区免费观在线| 精品成人私密视频| 欧美激情在线一区二区三区| 国产精品超碰97尤物18| 洋洋成人永久网站入口| 日韩中文字幕1| 国产成人丝袜美腿| 91亚洲精品久久久蜜桃网站| 欧美日韩三级一区二区| 日韩欧美国产一区二区三区| 国产亚洲精品7777| 一区二区三区欧美视频| 老鸭窝一区二区久久精品| 国产成人免费视频网站| 欧美综合一区二区| 欧美精品一区二区三区蜜臀| 国产精品免费aⅴ片在线观看| 一区二区在线免费观看| 看电视剧不卡顿的网站| 99久久久久免费精品国产| 91麻豆精品国产91久久久久| 国产欧美日韩综合| 亚洲mv大片欧洲mv大片精品| 久久成人羞羞网站| 日本二三区不卡| 久久久久久久久97黄色工厂| 亚洲一区免费观看| 国产福利精品一区二区| 欧美丝袜第三区| 国产精品日韩精品欧美在线| 天天爽夜夜爽夜夜爽精品视频| 国产传媒欧美日韩成人| 欧美吞精做爰啪啪高潮| 亚洲国产精品av| 男男视频亚洲欧美| 色综合激情五月| 亚洲午夜精品网| 国产激情偷乱视频一区二区三区| 日韩电影在线一区二区| 婷婷开心久久网| 91在线精品一区二区三区| 精品国产髙清在线看国产毛片| **欧美大码日韩| 国产激情偷乱视频一区二区三区| 欧美日韩视频第一区| 亚洲色图视频网站| 韩国理伦片一区二区三区在线播放| 欧美日韩午夜精品| 亚洲卡通欧美制服中文| 成人深夜视频在线观看| 26uuu久久天堂性欧美| 日本不卡不码高清免费观看| 欧美在线观看你懂的| 日韩美女视频一区二区| 粉嫩一区二区三区性色av| 久久人人97超碰com| 免费高清在线视频一区·| 欧美精品在线一区二区三区| 夜夜嗨av一区二区三区网页| 色先锋资源久久综合| 综合分类小说区另类春色亚洲小说欧美| 老汉av免费一区二区三区| 日韩欧美中文字幕精品| 三级欧美韩日大片在线看| 欧美色手机在线观看| 亚洲h动漫在线| 7777精品伊人久久久大香线蕉| 亚洲成在人线免费| 欧美三级中文字| 日韩精品久久理论片| 欧美一区二区三区播放老司机| 亚洲1区2区3区4区|