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

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

?? io.c

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

   io.c 
   Input/Output routines of qhull application

   see qh-c.htm and io.h

   see user.c for qh_errprint and qh_printfacetlist

   unix.c calls qh_readpoints and qh_produce_output

   unix.c and user.c are the only callers of io.c functions
   This allows the user to avoid loading io.o from qhull.a

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

#include "qhull_a.h"

/*========= -prototypes for internal functions ========= */

static int qh_compare_facetarea(const void *p1, const void *p2);
static int qh_compare_facetmerge(const void *p1, const void *p2);
static int qh_compare_facetvisit(const void *p1, const void *p2);
int qh_compare_vertexpoint(const void *p1, const void *p2); /* not used */

/*========= -functions in alphabetical order after qh_produce_output()  =====*/

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="produce_output">-</a>
  
  qh_produce_output()
    prints out the result of qhull in desired format
    if qh.GETarea
      computes and prints area and volume
    qh.PRINTout[] is an array of output formats

  notes:
    prints output in qh.PRINTout order
*/
void qh_produce_output(void) {
  int i, tempsize= qh_setsize ((setT*)qhmem.tempstack), d_1;

  if (qh VORONOI) {
    qh_clearcenters (qh_ASvoronoi);
    qh_vertexneighbors();
  }
  if (qh GETarea)
    qh_getarea(qh facet_list);
  qh_findgood_all (qh facet_list); 
  if (qh KEEParea || qh KEEPmerge || qh KEEPminArea < REALmax/2)
    qh_markkeep (qh facet_list);
  if (qh PRINTsummary)
    qh_printsummary(qh ferr);
  else if (qh PRINTout[0] == qh_PRINTnone)
    qh_printsummary(qh fout);
  for (i= 0; i < qh_PRINTEND; i++)
    qh_printfacets (qh fout, qh PRINTout[i], qh facet_list, NULL, !qh_ALL);
  qh_allstatistics();
  if (qh PRINTprecision && !qh MERGING && (qh JOGGLEmax > REALmax/2 || qh RERUN))
    qh_printstats (qh ferr, qhstat precision, NULL);
  if (qh VERIFYoutput && (zzval_(Zridge) > 0 || zzval_(Zridgemid) > 0)) 
    qh_printstats (qh ferr, qhstat vridges, NULL);
  if (qh PRINTstatistics) {
    qh_collectstatistics();
    qh_printstatistics(qh ferr, "");
    qh_memstatistics (qh ferr);
    d_1= sizeof(setT) + (qh hull_dim - 1) * SETelemsize;
    fprintf(qh ferr, "\
    size in bytes: hashentry %d merge %d ridge %d vertex %d facet %d\n\
         normal %d ridge vertices %d facet vertices or neighbors %d\n",
	    sizeof(hashentryT), sizeof(mergeT), sizeof(ridgeT),
	    sizeof(vertexT), sizeof(facetT),
	    qh normal_size, d_1, d_1 + SETelemsize);
  }
  if (qh_setsize ((setT*)qhmem.tempstack) != tempsize) {
    fprintf (qh ferr, "qhull internal error (qh_produce_output): temporary sets not empty (%d)\n",
	     qh_setsize ((setT*)qhmem.tempstack));
    qh_errexit (qh_ERRqhull, NULL, NULL);
  }
} /* produce_output */


/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="dfacet">-</a>
  
  dfacet( id )
    print facet by id, for debugging

*/
void dfacet (unsigned id) {
  facetT *facet;

  FORALLfacets {
    if (facet->id == id) {
      qh_printfacet (qh fout, facet);
      break;
    }
  }
} /* dfacet */


/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="dvertex">-</a>
  
  dvertex( id )
    print vertex by id, for debugging
*/
void dvertex (unsigned id) {
  vertexT *vertex;

  FORALLvertices {
    if (vertex->id == id) {
      qh_printvertex (qh fout, vertex);
      break;
    }
  }
} /* dvertex */


/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="compare_vertexpoint">-</a>
  
  qh_compare_vertexpoint( p1, p2 )
    used by qsort() to order vertices by point id 
*/
int qh_compare_vertexpoint(const void *p1, const void *p2) {
  vertexT *a= *((vertexT **)p1), *b= *((vertexT **)p2);
 
  return ((qh_pointid(a->point) > qh_pointid(b->point)?1:-1));
} /* compare_vertexpoint */

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="compare_facetarea">-</a>
  
  qh_compare_facetarea( p1, p2 )
    used by qsort() to order facets by area
*/
static int qh_compare_facetarea(const void *p1, const void *p2) {
  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);

  if (!a->isarea)
    return -1;
  if (!b->isarea)
    return 1; 
  if (a->f.area > b->f.area)
    return 1;
  else if (a->f.area == b->f.area)
    return 0;
  return -1;
} /* compare_facetarea */

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="compare_facetmerge">-</a>
  
  qh_compare_facetmerge( p1, p2 )
    used by qsort() to order facets by number of merges
*/
static int qh_compare_facetmerge(const void *p1, const void *p2) {
  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);
 
  return (a->nummerge - b->nummerge);
} /* compare_facetvisit */

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="compare_facetvisit">-</a>
  
  qh_compare_facetvisit( p1, p2 )
    used by qsort() to order facets by visit id or id
*/
static int qh_compare_facetvisit(const void *p1, const void *p2) {
  facetT *a= *((facetT **)p1), *b= *((facetT **)p2);
  int i,j;

  if (!(i= a->visitid))
    i= - a->id; /* do not convert to int */
  if (!(j= b->visitid))
    j= - b->id;
  return (i - j);
} /* compare_facetvisit */

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="countfacets">-</a>
  
  qh_countfacets( facetlist, facets, printall, 
          numfacets, numsimplicial, totneighbors, numridges, numcoplanar  )
    count good facets for printing and set visitid
    if allfacets, ignores qh_skipfacet()

  returns:
    numfacets, numsimplicial, total neighbors, numridges, coplanars
    each facet with ->visitid indicating 1-relative position
      ->visitid==0 indicates not good
  
  notes
    if qh.NEWfacets, 
      does not count visible facets (matches qh_printafacet)

  design:
    for all facets on facetlist and in facets set
      unless facet is skipped or visible (i.e., will be deleted)
        mark facet->visitid
        update counts
*/
void qh_countfacets (facetT *facetlist, setT *facets, boolT printall,
    int *numfacetsp, int *numsimplicialp, int *totneighborsp, int *numridgesp, int *numcoplanarsp) {
  facetT *facet, **facetp;
  int numfacets= 0, numsimplicial= 0, numridges= 0, totneighbors= 0, numcoplanars= 0;

  FORALLfacet_(facetlist) {
    if ((facet->visible && qh NEWfacets)
    || (!printall && qh_skipfacet(facet)))
      facet->visitid= 0;
    else {
      facet->visitid= ++numfacets;
      totneighbors += qh_setsize (facet->neighbors);
      if (facet->simplicial) 
        numsimplicial++;
      else
        numridges += qh_setsize (facet->ridges);
      if (facet->coplanarset)
        numcoplanars += qh_setsize (facet->coplanarset);
    }
  }
  FOREACHfacet_(facets) {
    if ((facet->visible && qh NEWfacets)
    || (!printall && qh_skipfacet(facet)))
      facet->visitid= 0;
    else {
      facet->visitid= ++numfacets;
      totneighbors += qh_setsize (facet->neighbors);
      if (facet->simplicial)
        numsimplicial++;
      else
        numridges += qh_setsize (facet->ridges);
      if (facet->coplanarset)
        numcoplanars += qh_setsize (facet->coplanarset);
    }
  }
  qh visit_id += numfacets+1;
  *numfacetsp= numfacets;
  *numsimplicialp= numsimplicial;
  *totneighborsp= totneighbors;
  *numridgesp= numridges;
  *numcoplanarsp= numcoplanars;
} /* countfacets */

/*-<a                             href="qh-c.htm#io"
  >-------------------------------</a><a name="detvnorm">-</a>
  
  qh_detvnorm( vertex, vertexA, centers, offset )
    compute separating plane of the Voronoi diagram for a pair of input sites
    centers= set of facets (i.e., Voronoi vertices)
      facet->visitid= 0 iff vertex-at-infinity (i.e., unbounded)
        
  assumes:
    qh_ASvoronoi and qh_vertexneighbors() already set
  
  returns:
    norm
      a pointer into qh.gm_matrix to qh.hull_dim-1 reals
      copy the data before reusing qh.gm_matrix
    offset
      if 'QVn'
        sign adjusted so that qh.GOODvertexp is inside
      else
        sign adjusted so that vertex is inside
      
    qh.gm_matrix= simplex of points from centers relative to first center
    
  notes:
    in io.c so that code for 'v Tv' can be removed by removing io.c
    returns pointer into qh.gm_matrix to avoid tracking of temporary memory
  
  design:
    determine midpoint of input sites
    build points as the set of Voronoi vertices
    select a simplex from points (if necessary)
      include midpoint if the Voronoi region is unbounded
    relocate the first vertex of the simplex to the origin
    compute the normalized hyperplane through the simplex
    orient the hyperplane toward 'QVn' or 'vertex'
    if 'Tv' or 'Ts'
      if bounded
        test that hyperplane is the perpendicular bisector of the input sites
      test that Voronoi vertices not in the simplex are still on the hyperplane
    free up temporary memory
*/
pointT *qh_detvnorm (vertexT *vertex, vertexT *vertexA, setT *centers, realT *offsetp) {
  facetT *facet, **facetp;
  int  i, k, pointid, pointidA, point_i, point_n;
  setT *simplex= NULL;
  pointT *point, **pointp, *point0, *midpoint, *normal, *inpoint;
  coordT *coord, *gmcoord, *normalp;
  setT *points= qh_settemp (qh TEMPsize);
  boolT nearzero= False;
  boolT unbounded= False;
  int numcenters= 0;
  int dim= qh hull_dim - 1;
  realT dist, offset, angle, zero= 0.0;

  midpoint= qh gm_matrix + qh hull_dim * qh hull_dim;  /* last row */
  for (k= 0; k < dim; k++)
    midpoint[k]= (vertex->point[k] + vertexA->point[k])/2;
  FOREACHfacet_(centers) {
    numcenters++;
    if (!facet->visitid)
      unbounded= True;
    else {
      if (!facet->center)
        facet->center= qh_facetcenter (facet->vertices);
      qh_setappend (&points, facet->center);
    }
  }
  if (numcenters > dim) {
    simplex= qh_settemp (qh TEMPsize);
    qh_setappend (&simplex, vertex->point);
    if (unbounded)
      qh_setappend (&simplex, midpoint);
    qh_maxsimplex (dim, points, NULL, 0, &simplex);
    qh_setdelnth (simplex, 0);
  }else if (numcenters == dim) {
    if (unbounded)
      qh_setappend (&points, midpoint);
    simplex= points; 
  }else {
    fprintf(qh ferr, "qh_detvnorm: too few points (%d) to compute separating plane\n", numcenters);
    qh_errexit (qh_ERRqhull, NULL, NULL);
  }
  i= 0;
  gmcoord= qh gm_matrix;
  point0= SETfirstt_(simplex, pointT);
  FOREACHpoint_(simplex) {
    if (qh IStracing >= 4)
      qh_printmatrix(qh ferr, "qh_detvnorm: Voronoi vertex or midpoint", 
                              &point, 1, dim);
    if (point != point0) {
      qh gm_row[i++]= gmcoord;
      coord= point0;
      for (k= dim; k--; )
        *(gmcoord++)= *point++ - *coord++;
    }
  }
  qh gm_row[i]= gmcoord;  /* does not overlap midpoint, may be used later for qh_areasimplex */
  normal= gmcoord;
  qh_sethyperplane_gauss (dim, qh gm_row, point0, True,
           	normal, &offset, &nearzero);
  if (qh GOODvertexp == vertexA->point)
    inpoint= vertexA->point;
  else
    inpoint= vertex->point;
  zinc_(Zdistio);
  dist= qh_distnorm (dim, inpoint, normal, &offset);
  if (dist > 0) {
    offset= -offset;
    normalp= normal;
    for (k= dim; k--; ) {
      *normalp= -(*normalp);
      normalp++;
    }
  }
  if (qh VERIFYoutput || qh PRINTstatistics) {
    pointid= qh_pointid (vertex->point);
    pointidA= qh_pointid (vertexA->point);
    if (!unbounded) {
      zinc_(Zdiststat);
      dist= qh_distnorm (dim, midpoint, normal, &offset);
      if (dist < 0)
        dist= -dist;
      zzinc_(Zridgemid);
      wwmax_(Wridgemidmax, dist);
      wwadd_(Wridgemid, dist);
      trace4((qh ferr, "qh_detvnorm: points %d %d midpoint dist %2.2g\n",
                 pointid, pointidA, dist));
      for (k= 0; k < dim; k++) 
        midpoint[k]= vertexA->point[k] - vertex->point[k];  /* overwrites midpoint! */
      qh_normalize (midpoint, dim, False);
      angle= qh_distnorm (dim, midpoint, normal, &zero); /* qh_detangle uses dim+1 */
      if (angle < 0.0)
	angle= angle + 1.0;
      else
	angle= angle - 1.0;
      if (angle < 0.0)
	angle -= angle;
      trace4((qh ferr, "qh_detvnorm: points %d %d angle %2.2g nearzero %d\n",
                 pointid, pointidA, angle, nearzero));
      if (nearzero) {
        zzinc_(Zridge0);
        wwmax_(Wridge0max, angle);
        wwadd_(Wridge0, angle);
      }else {
        zzinc_(Zridgeok)
        wwmax_(Wridgeokmax, angle);
        wwadd_(Wridgeok, angle);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一二三四在线| 理论电影国产精品| 在线亚洲免费视频| 偷偷要91色婷婷| 欧美大片一区二区| 国产成人小视频| 亚洲欧美区自拍先锋| 欧美精品高清视频| 狠狠网亚洲精品| 亚洲欧洲日产国产综合网| 在线观看日韩精品| 麻豆精品在线观看| 国产精品久久毛片av大全日韩| 91高清视频在线| 国产在线不卡一区| 亚洲激情六月丁香| 日韩视频一区二区三区在线播放| 国产成人免费视频精品含羞草妖精 | 免费看黄色91| 26uuu国产一区二区三区| 9i看片成人免费高清| 婷婷丁香久久五月婷婷| 国产亚洲欧洲一区高清在线观看| 色悠悠久久综合| 久久精品国产秦先生| 亚洲色图.com| xfplay精品久久| 欧洲视频一区二区| 国产成人免费视频精品含羞草妖精| 依依成人综合视频| 久久精品一区蜜桃臀影院| 91福利视频网站| 粉嫩在线一区二区三区视频| 日韩专区在线视频| 国产精品成人免费| 日韩三级.com| 欧美视频一二三区| 成人av先锋影音| 久久黄色级2电影| 亚洲激情网站免费观看| 国产性色一区二区| 欧美在线色视频| 成人午夜视频网站| 激情偷乱视频一区二区三区| 一区二区三区四区蜜桃| 中文欧美字幕免费| 久久久久久久久久久久久女国产乱 | 国产精品超碰97尤物18| 欧美午夜精品久久久久久孕妇| 国产乱国产乱300精品| 亚洲国产日产av| 中文字幕一区二区不卡| 久久久噜噜噜久久中文字幕色伊伊| 欧美在线高清视频| 99精品视频在线观看免费| 国产一区二区三区在线观看精品| 午夜不卡av在线| 亚洲一二三四在线| 亚洲欧美乱综合| 18欧美乱大交hd1984| 国产精品网站导航| 久久综合丝袜日本网| 欧美电影免费观看完整版| 在线观看91精品国产麻豆| 欧美日韩一区国产| 欧美性受xxxx黑人xyx| 色屁屁一区二区| 99久久99久久精品免费观看| voyeur盗摄精品| av在线不卡观看免费观看| 丰满白嫩尤物一区二区| 国产成人a级片| 成人丝袜高跟foot| 成人app软件下载大全免费| 成人中文字幕电影| www.色精品| 色综合久久久久综合体| 91在线精品一区二区三区| 91香蕉国产在线观看软件| 99国产精品久久久久| 一本在线高清不卡dvd| 91美女蜜桃在线| 欧美性欧美巨大黑白大战| 欧美日韩国产小视频在线观看| 欧美午夜精品久久久| 91精品一区二区三区在线观看| 欧美日本高清视频在线观看| 日韩一区二区三区观看| 欧美成人a视频| 久久女同性恋中文字幕| 日本一区二区三区dvd视频在线 | 91黄色免费版| 欧美日韩国产另类不卡| 日韩欧美激情四射| 国产欧美一区二区三区在线看蜜臀 | 亚洲欧洲成人自拍| 夜色激情一区二区| 免费黄网站欧美| 国产精品夜夜爽| 色av成人天堂桃色av| 717成人午夜免费福利电影| 欧美成人精品二区三区99精品| 久久久夜色精品亚洲| 亚洲日本一区二区三区| 婷婷中文字幕综合| 国产一区二区三区久久久| av成人老司机| 69久久99精品久久久久婷婷| 久久精品在这里| 亚洲一区中文日韩| 韩国毛片一区二区三区| 97精品电影院| 日韩欧美电影一区| 亚洲欧洲日韩综合一区二区| 日本不卡一区二区三区高清视频| 国产宾馆实践打屁股91| 在线观看欧美黄色| 久久久久久久久一| 亚洲成va人在线观看| 国产成人av网站| 欧美精品久久久久久久久老牛影院| 久久嫩草精品久久久精品| 亚洲午夜视频在线观看| 国产精品91一区二区| 欧美日韩国产综合草草| 国产精品乱人伦中文| 麻豆成人91精品二区三区| 97se亚洲国产综合自在线不卡| 日韩一卡二卡三卡四卡| 亚洲精品日日夜夜| 国产成a人亚洲精| 日韩视频中午一区| 亚洲午夜久久久| 99在线精品一区二区三区| 日韩免费观看高清完整版 | 日韩一区二区高清| 一个色在线综合| 成人国产电影网| wwwwww.欧美系列| 婷婷丁香激情综合| 色综合久久天天综合网| 中文字幕第一页久久| 精品一区二区av| 欧美一区二区三区成人| 亚洲成人av电影在线| 色婷婷综合久色| 中文字幕一区av| 成人精品国产免费网站| 久久综合九色综合久久久精品综合| 日韩电影一区二区三区四区| 欧美亚洲一区二区三区四区| 中文字幕亚洲欧美在线不卡| 国产美女在线观看一区| 欧美一级夜夜爽| 日韩电影在线一区二区三区| 欧美在线观看禁18| 亚洲一线二线三线久久久| 色就色 综合激情| 亚洲欧美国产三级| 色乱码一区二区三区88| 一区二区在线观看视频在线观看| 99久久99久久精品免费看蜜桃| 国产精品欧美一区二区三区| 国产成人精品aa毛片| 久久精品夜色噜噜亚洲a∨| 美女一区二区久久| 久久网站最新地址| 丁香六月综合激情| 国产精品毛片无遮挡高清| 播五月开心婷婷综合| 1024成人网| 在线视频国产一区| 亚洲国产一区二区在线播放| 欧美日韩国产另类一区| 日韩和的一区二区| 日韩一级二级三级精品视频| 麻豆国产精品一区二区三区 | 不卡欧美aaaaa| 亚洲女人的天堂| 欧美高清性hdvideosex| 美女网站色91| 国产欧美日韩另类一区| 91视频在线观看免费| 午夜精品国产更新| 日韩欧美亚洲国产另类 | 美美哒免费高清在线观看视频一区二区| 欧美高清性hdvideosex| 狠狠色丁香九九婷婷综合五月| 久久久久久久久久久久久久久99| 成人天堂资源www在线| 一区二区不卡在线播放 | 蜜臀久久99精品久久久久久9| 精品国产一二三区| 不卡视频一二三四| 亚洲国产日韩综合久久精品| 精品久久五月天| 波多野结衣精品在线| 五月婷婷欧美视频| 久久久久亚洲综合| 在线精品视频免费观看|