Doxygen Source Code Documentation
qhull_a.h File Reference
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#include <string.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#include "qhull.h"
#include "mem.h"
#include "qset.h"
#include "geom.h"
#include "merge.h"
#include "poly.h"
#include "io.h"
#include "stat.h"
Go to the source code of this file.
Defines | |
#define | trace0(args) {if (qh IStracing) fprintf args;} |
#define | trace1(args) {if (qh IStracing >= 1) fprintf args;} |
#define | trace2(args) {if (qh IStracing >= 2) fprintf args;} |
#define | trace3(args) {if (qh IStracing >= 3) fprintf args;} |
#define | trace4(args) {if (qh IStracing >= 4) fprintf args;} |
#define | trace5(args) {if (qh IStracing >= 5) fprintf args;} |
Functions | |
void | qh_qhull (void) |
boolT | qh_addpoint (pointT *furthest, facetT *facet, boolT checkdist) |
void | qh_buildhull (void) |
void | qh_buildtracing (pointT *furthest, facetT *facet) |
void | qh_build_withrestart (void) |
void | qh_errexit2 (int exitcode, facetT *facet, facetT *otherfacet) |
void | qh_findhorizon (pointT *point, facetT *facet, int *goodvisible, int *goodhorizon) |
pointT * | qh_nextfurthest (facetT **visible) |
void | qh_partitionall (setT *vertices, pointT *points, int npoints) |
void | qh_partitioncoplanar (pointT *point, facetT *facet, realT *dist) |
void | qh_partitionpoint (pointT *point, facetT *facet) |
void | qh_partitionvisible (boolT allpoints, int *numpoints) |
void | qh_precision (char *reason) |
void | qh_printsummary (FILE *fp) |
void | qh_appendprint (qh_PRINT format) |
void | qh_freebuild (boolT allmem) |
void | qh_freebuffers (void) |
void | qh_initbuffers (coordT *points, int numpoints, int dim, boolT ismalloc) |
void | qh_option (char *option, int *i, realT *r) |
int | qh_strtol (const char *s, char **endp) |
double | qh_strtod (const char *s, char **endp) |
void | qh_allstatA (void) |
void | qh_allstatB (void) |
void | qh_allstatC (void) |
void | qh_allstatD (void) |
void | qh_allstatE (void) |
void | qh_allstatF (void) |
Define Documentation
|
|
|
|
|
|
Definition at line 77 of file qhull_a.h. Referenced by qh_delfacet(), and qh_freebuffers(). |
Function Documentation
|
Definition at line 157 of file qhull.c. References boolT, FORALLnew_facets, facetT::notfurthest, num_points, pointT, qh, qh_ALL, qh_attachnewfacets(), qh_buildtracing(), qh_checkpolygon(), qh_deletevisible(), qh_delfacet(), qh_delvertex(), qh_errexit(), qh_ERRqhull, qh_findbest(), qh_findgood(), qh_findhorizon(), qh_makenewfacets(), qh_makenewplanes(), qh_matchnewfacets(), qh_NOupper, qh_partitioncoplanar(), qh_partitionvisible(), qh_pointid(), qh_premerge(), qh_printfacetlist(), qh_resetlists(), qh_setappend(), qh_updatevertices(), qh_USEfindbestnew, realT, facetT::simplicial, trace2, wadd_, Wnewbalance, Wnewbalance2, Wpbalance, Wpbalance2, zinc_, zmax_, Zmaxvertex, Znotgood, Znotgoodnew, Znotmax, Zpartition, Zpbalance, Zprocessed, Ztotmerge, zzadd_, zzinc_, and zzval_. Referenced by qh_buildhull(), and qh_initbuild().
00157 { 00158 int goodvisible, goodhorizon; 00159 vertexT *vertex; 00160 facetT *newfacet; 00161 realT dist, newbalance, pbalance; 00162 boolT isoutside= False; 00163 int numpart, numpoints, numnew, firstnew; 00164 00165 qh maxoutdone= False; 00166 if (qh_pointid (furthest) == -1) 00167 qh_setappend (&qh other_points, furthest); 00168 if (!facet) { 00169 fprintf (qh ferr, "qh_addpoint: NULL facet. Use qh_findbestfacet\n"); 00170 qh_errexit (qh_ERRqhull, NULL, NULL); 00171 } 00172 if (checkdist) { 00173 facet= qh_findbest (furthest, facet, !qh_ALL, False, !qh_NOupper, 00174 &dist, &isoutside, &numpart); 00175 zzadd_(Zpartition, numpart); 00176 if (!isoutside) { 00177 zinc_(Znotmax); /* last point of outsideset is no longer furthest. */ 00178 facet->notfurthest= True; 00179 qh_partitioncoplanar (furthest, facet, &dist); 00180 return True; 00181 } 00182 } 00183 qh_buildtracing (furthest, facet); 00184 if (qh STOPpoint < 0 && qh furthest_id == -qh STOPpoint-1) { 00185 facet->notfurthest= True; 00186 return False; 00187 } 00188 qh_findhorizon (furthest, facet, &goodvisible, &goodhorizon); 00189 if (qh ONLYgood && !(goodvisible+goodhorizon) && !qh GOODclosest) { 00190 zinc_(Znotgood); 00191 facet->notfurthest= True; 00192 /* last point of outsideset is no longer furthest. This is ok 00193 since all points of the outside are likely to be bad */ 00194 qh_resetlists (False /*qh visible_list newvertex_list newfacet_list */); 00195 return True; 00196 } 00197 zzinc_(Zprocessed); 00198 firstnew= qh facet_id; 00199 vertex= qh_makenewfacets (furthest /*visible_list, attaches if !ONLYgood */); 00200 qh_makenewplanes (/* newfacet_list */); 00201 numnew= qh facet_id - firstnew; 00202 newbalance= numnew - (realT) (qh num_facets-qh num_visible) 00203 * qh hull_dim/qh num_vertices; 00204 wadd_(Wnewbalance, newbalance); 00205 wadd_(Wnewbalance2, newbalance * newbalance); 00206 if (qh ONLYgood 00207 && !qh_findgood (qh newfacet_list, goodhorizon) && !qh GOODclosest) { 00208 FORALLnew_facets 00209 qh_delfacet (newfacet); 00210 qh_delvertex (vertex); 00211 qh_resetlists (True /*qh visible_list newvertex_list newfacet_list */); 00212 zinc_(Znotgoodnew); 00213 facet->notfurthest= True; 00214 return True; 00215 } 00216 if (qh ONLYgood) 00217 qh_attachnewfacets(/*visible_list*/); 00218 qh_matchnewfacets(); 00219 qh_updatevertices(); 00220 if (qh STOPcone && qh furthest_id == qh STOPcone-1) { 00221 facet->notfurthest= True; 00222 return False; /* visible_list etc. still defined */ 00223 } 00224 if (qh PREmerge || qh MERGEexact) { 00225 qh_premerge (vertex, qh premerge_centrum, qh premerge_cos); 00226 if (zzval_(Ztotmerge) > qh_USEfindbestnew) 00227 qh findbestnew= True; 00228 else { 00229 FORALLnew_facets { 00230 if (!newfacet->simplicial) { 00231 qh findbestnew= True; /* use qh_findbestnew instead of qh_findbest*/ 00232 break; 00233 } 00234 } 00235 } 00236 }else if (qh BESToutside) 00237 qh findbestnew= True; 00238 qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numpoints); 00239 qh findbestnew= False; 00240 qh findbest_notsharp= False; 00241 zinc_(Zpbalance); 00242 pbalance= numpoints - (realT) qh hull_dim /* assumes all points extreme */ 00243 * (qh num_points - qh num_vertices)/qh num_vertices; 00244 wadd_(Wpbalance, pbalance); 00245 wadd_(Wpbalance2, pbalance * pbalance); 00246 qh_deletevisible (/*qh visible_list*/); 00247 zmax_(Zmaxvertex, qh num_vertices); 00248 qh NEWfacets= False; 00249 if (qh IStracing >= 4) 00250 qh_printfacetlist (qh newfacet_list, NULL, True); 00251 if (qh CHECKfrequently) { 00252 if (qh num_facets < 50) 00253 qh_checkpolygon (qh facet_list); 00254 else 00255 qh_checkpolygon (qh newfacet_list); 00256 } 00257 if (qh STOPpoint > 0 && qh furthest_id == qh STOPpoint-1) 00258 return False; 00259 qh_resetlists (True /*qh visible_list newvertex_list newfacet_list */); 00260 trace2((qh ferr, "qh_addpoint: added p%d new facets %d new balance %2.2g point balance %2.2g\n", 00261 qh_pointid (furthest), numnew, newbalance, pbalance)); 00262 if (qh hull_dim > 3 && qh TRACEpoint == qh_pointid (furthest)) { 00263 qh IStracing= 0; 00264 qhmem.IStracing= 0; 00265 } 00266 return True; 00267 } /* addpoint */ |
|
Definition at line 34 of file stat.c. Referenced by qh_initstatistics().
00034 { 00035 00036 /* zdef_(type,name,doc,average) */ 00037 zzdef_(zdoc, Zdoc2, "precision statistics", -1); 00038 zdef_(zinc, Znewvertex, NULL, -1); 00039 zdef_(wadd, Wnewvertex, "ave. distance of a new vertex to a facet (not 0s)", Znewvertex); 00040 zzdef_(wmax, Wnewvertexmax, "max. distance of a new vertex to a facet", -1); 00041 zdef_(wmax, Wvertexmax, "max. distance of an output vertex to a facet", -1); 00042 zdef_(wmin, Wvertexmin, "min. distance of an output vertex to a facet", -1); 00043 zdef_(wmin, Wmindenom, "min. denominator in hyperplane computation", -1); 00044 00045 qhstat precision= qhstat next; /* call qh_precision for each of these */ 00046 zzdef_(zdoc, Zdoc3, "precision problems", -1); 00047 zzdef_(zinc, Zcoplanarridges, "coplanar half ridges in output", -1); 00048 zzdef_(zinc, Zconcaveridges, "concave half ridges in output", -1); 00049 zzdef_(zinc, Zflippedfacets, "flipped facets", -1); 00050 zzdef_(zinc, Zcoplanarhorizon, "coplanar horizon facets for new vertices", -1); 00051 zzdef_(zinc, Zcoplanarpart, "coplanar points during partitioning", -1); 00052 zzdef_(zinc, Zminnorm, "degenerate hyperplanes recomputed with gaussian elimination", -1); 00053 zzdef_(zinc, Znearlysingular, "nearly singular or axis-parallel hyperplanes", -1); 00054 zzdef_(zinc, Zback0, "zero divisors during back substitute", -1); 00055 zzdef_(zinc, Zgauss0, "zero divisors during gaussian elimination", -1); 00056 zzdef_(zinc, Zmultiridge, "ridges with multiple neighbors", -1); 00057 } |
|
Definition at line 58 of file stat.c. Referenced by qh_initstatistics().
00058 { 00059 zzdef_(zdoc, Zdoc1, "summary information", -1); 00060 zdef_(zinc, Zvertices, "number of vertices in output", -1); 00061 zdef_(zinc, Znumfacets, "number of facets in output", -1); 00062 zdef_(zinc, Znonsimplicial, "number of non-simplicial facets in output", -1); 00063 zdef_(zinc, Znowsimplicial, "number of simplicial facets that were merged", -1); 00064 zdef_(zinc, Znumridges, "number of ridges in output", -1); 00065 zdef_(zadd, Znumridges, "average number of ridges per facet", Znumfacets); 00066 zdef_(zmax, Zmaxridges, "maximum number of ridges", -1); 00067 zdef_(zadd, Znumneighbors, "average number of neighbors per facet", Znumfacets); 00068 zdef_(zmax, Zmaxneighbors, "maximum number of neighbors", -1); 00069 zdef_(zadd, Znumvertices, "average number of vertices per facet", Znumfacets); 00070 zdef_(zmax, Zmaxvertices, "maximum number of vertices", -1); 00071 zdef_(zadd, Znumvneighbors, "average number of neighbors per vertex", Zvertices); 00072 zdef_(zmax, Zmaxvneighbors, "maximum number of neighbors", -1); 00073 zdef_(wadd, Wcpu, "cpu seconds for qhull after input", -1); 00074 zdef_(zinc, Ztotvertices, "vertices created altogether", -1); 00075 zzdef_(zinc, Zsetplane, "facets created altogether", -1); 00076 zdef_(zinc, Ztotridges, "ridges created altogether", -1); 00077 zdef_(zinc, Zpostfacets, "facets before post merge", -1); 00078 zdef_(zadd, Znummergetot, "average merges per facet (at most 511)", Znumfacets); 00079 zdef_(zmax, Znummergemax, " maximum merges for a facet (at most 511)", -1); 00080 zdef_(zinc, Zangle, NULL, -1); 00081 zdef_(wadd, Wangle, "average angle (cosine) of facet normals for all ridges", Zangle); 00082 zdef_(wmax, Wanglemax, " maximum angle (cosine) of facet normals across a ridge", -1); 00083 zdef_(wmin, Wanglemin, " minimum angle (cosine) of facet normals across a ridge", -1); 00084 zdef_(wadd, Wareatot, "total area of facets", -1); 00085 zdef_(wmax, Wareamax, " maximum facet area", -1); 00086 zdef_(wmin, Wareamin, " minimum facet area", -1); 00087 } |
|
Definition at line 88 of file stat.c. Referenced by qh_initstatistics().
00088 { 00089 zdef_(zdoc, Zdoc9, "build hull statistics", -1); 00090 zzdef_(zinc, Zprocessed, "points processed", -1); 00091 zzdef_(zinc, Zretry, "retries due to precision problems", -1); 00092 zdef_(wmax, Wretrymax, " max. random joggle", -1); 00093 zdef_(zmax, Zmaxvertex, "max. vertices at any one time", -1); 00094 zdef_(zinc, Ztotvisible, "ave. visible facets per iteration", Zprocessed); 00095 zdef_(zinc, Zinsidevisible, " ave. visible facets without an horizon neighbor", Zprocessed); 00096 zdef_(zadd, Zvisfacettot, " ave. facets deleted per iteration", Zprocessed); 00097 zdef_(zmax, Zvisfacetmax, " maximum", -1); 00098 zdef_(zadd, Zvisvertextot, "ave. visible vertices per iteration", Zprocessed); 00099 zdef_(zmax, Zvisvertexmax, " maximum", -1); 00100 zdef_(zadd, Zdelvertextot, " ave. vertices deleted per iteration", Zprocessed); 00101 zdef_(zmax, Zdelvertexmax, " maximum vertices deleted", -1); 00102 zdef_(zinc, Ztothorizon, "ave. horizon facets per iteration", Zprocessed); 00103 zdef_(zadd, Znewfacettot, "ave. new or merged facets per iteration", Zprocessed); 00104 zdef_(zmax, Znewfacetmax, " maximum (includes initial simplex)", -1); 00105 zdef_(wadd, Wnewbalance, "average new facet balance", Zprocessed); 00106 zdef_(wadd, Wnewbalance2, " standard deviation", -1); 00107 zdef_(wadd, Wpbalance, "average partition balance", Zpbalance); 00108 zdef_(wadd, Wpbalance2, " standard deviation", -1); 00109 zdef_(zinc, Zpbalance, " number of trials", -1); 00110 zdef_(zinc, Zsearchpoints, "searches of all points for initial simplex", -1); 00111 zdef_(zinc, Zdetsimplex, "determinants computed (area & initial hull)", -1); 00112 zdef_(zinc, Znoarea, "determinants not computed because vertex too low", -1); 00113 zdef_(zinc, Znotmax, "points ignored (not above max_outside)", -1); 00114 zdef_(zinc, Znotgood, "points ignored (not above a good facet)", -1); 00115 zdef_(zinc, Znotgoodnew, "points ignored (didn't create a good new facet)", -1); 00116 zdef_(zinc, Zgoodfacet, "good facets found", -1); 00117 zzdef_(zinc, Znumvisibility, "distance tests for facet visibility", -1); 00118 zdef_(zinc, Zdistvertex, "distance tests to report minimum vertex", -1); 00119 zdef_(zinc, Ztotcheck, "points checked for facets' outer planes", -1); 00120 zdef_(zinc, Zcheckpart, " ave. distance tests per check", Ztotcheck); 00121 } |
|
Definition at line 122 of file stat.c. Referenced by qh_initstatistics().
00122 { 00123 zdef_(zdoc, Zdoc4, "partitioning statistics", -1); 00124 zdef_(zinc, Zpartinside, "inside points", -1); 00125 zdef_(zinc, Zpartnear, " inside points kept with a facet", -1); 00126 zdef_(zinc, Zcoplanarinside, " inside points that were coplanar with a facet", -1); 00127 zdef_(wadd, Wmaxout, "difference in max_outside at final check", -1); 00128 00129 zzdef_(zinc, Zpartitionall, "distance tests for initial partition", -1); 00130 zdef_(zinc, Ztotpartition, "partitions of a point", -1); 00131 zzdef_(zinc, Zpartition, "distance tests for partitioning", -1); 00132 zzdef_(zinc, Zdistcheck, "distance tests for checking flipped facets", -1); 00133 zzdef_(zinc, Zdistconvex, "distance tests for checking convexity", -1); 00134 zdef_(zinc, Zdistgood, "distance tests for checking good point", -1); 00135 zdef_(zinc, Zdistio, "distance tests for output", -1); 00136 zdef_(zinc, Zdiststat, "distance tests for statistics", -1); 00137 zdef_(zinc, Zdistplane, "total number of distance tests", -1); 00138 zdef_(zinc, Ztotpartcoplanar, "partitions of coplanar points or deleted vertices", -1); 00139 zzdef_(zinc, Zpartcoplanar, " distance tests for these partitions", -1); 00140 zdef_(zinc, Zcomputefurthest, "distance tests for computing furthest", -1); 00141 } |
|
Definition at line 142 of file stat.c. Referenced by qh_initstatistics().
00142 { 00143 zdef_(zdoc, Zdoc5, "statistics for matching ridges", -1); 00144 zdef_(zinc, Zhashlookup, "total lookups for matching ridges of new facets", -1); 00145 zdef_(zinc, Zhashtests, "average number of tests to match a ridge", Zhashlookup); 00146 zdef_(zinc, Zhashridge, "total lookups of subridges (duplicates and boundary)", -1); 00147 zdef_(zinc, Zhashridgetest, "average number of tests per subridge", Zhashridge); 00148 zdef_(zinc, Zdupsame, "duplicated ridges in same merge cycle", -1); 00149 zdef_(zinc, Zdupflip, "duplicated ridges with flipped facets", -1); 00150 00151 zdef_(zdoc, Zdoc6, "statistics for determining merges", -1); 00152 zdef_(zinc, Zangletests, "angles computed for ridge convexity", -1); 00153 zdef_(zinc, Zbestcentrum, "best merges used centrum instead of vertices",-1); 00154 zzdef_(zinc, Zbestdist, "distance tests for best merge", -1); 00155 zzdef_(zinc, Zcentrumtests, "distance tests for centrum convexity", -1); 00156 zzdef_(zinc, Zdistzero, "distance tests for checking simplicial convexity", -1); 00157 zdef_(zinc, Zcoplanarangle, "coplanar angles in getmergeset", -1); 00158 zdef_(zinc, Zcoplanarcentrum, "coplanar centrums in getmergeset", -1); 00159 zdef_(zinc, Zconcaveridge, "concave ridges in getmergeset", -1); 00160 } |
|
Definition at line 161 of file stat.c. Referenced by qh_initstatistics().
00161 { 00162 zdef_(zdoc, Zdoc7, "statistics for merging", -1); 00163 zdef_(zinc, Zpremergetot, "merge iterations", -1); 00164 zdef_(zadd, Zmergeinittot, "ave. initial non-convex ridges per iteration", Zpremergetot); 00165 zdef_(zadd, Zmergeinitmax, " maximum", -1); 00166 zdef_(zadd, Zmergesettot, " ave. additional non-convex ridges per iteration", Zpremergetot); 00167 zdef_(zadd, Zmergesetmax, " maximum additional in one pass", -1); 00168 zdef_(zadd, Zmergeinittot2, "initial non-convex ridges for post merging", -1); 00169 zdef_(zadd, Zmergesettot2, " additional non-convex ridges", -1); 00170 zdef_(wmax, Wmaxoutside, "max distance of vertex or coplanar point above facet (w/roundoff)", -1); 00171 zdef_(wmin, Wminvertex, "max distance of merged vertex below facet (or roundoff)", -1); 00172 zdef_(zinc, Zwidefacet, "centrums frozen due to a wide merge", -1); 00173 zdef_(zinc, Zwidevertices, "centrums frozen due to extra vertices", -1); 00174 zzdef_(zinc, Ztotmerge, "total number of facets or cycles of facets merged", -1); 00175 zdef_(zinc, Zmergesimplex, "merged a simplex", -1); 00176 zdef_(zinc, Zonehorizon, "simplices merged into coplanar horizon", -1); 00177 zzdef_(zinc, Zcyclehorizon, "cycles of facets merged into coplanar horizon", -1); 00178 zzdef_(zadd, Zcyclefacettot, " ave. facets per cycle", Zcyclehorizon); 00179 zdef_(zmax, Zcyclefacetmax, " max. facets", -1); 00180 zdef_(zinc, Zmergeintohorizon, "new facets merged into horizon", -1); 00181 zdef_(zinc, Zmergenew, "new facets merged", -1); 00182 zdef_(zinc, Zmergehorizon, "horizon facets merged into new facets", -1); 00183 zdef_(zinc, Zmergevertex, "vertices deleted by merging", -1); 00184 zdef_(zinc, Zcyclevertex, "vertices deleted by merging into coplanar horizon", -1); 00185 zdef_(zinc, Zdegenvertex, "vertices deleted by degenerate facet", -1); 00186 zdef_(zinc, Zmergeflipdup, "merges due to flipped facets in duplicated ridge", -1); 00187 zdef_(zinc, Zneighbor, "merges due to redundant neighbors", -1); 00188 zdef_(zadd, Ztestvneighbor, "non-convex vertex neighbors", -1); 00189 } |
|
Definition at line 34 of file global.c. References format, i, qh, qh_PRINT, and qh_PRINTEND. Referenced by qh_initflags().
|
|
Definition at line 277 of file qhull.c. References MERGING, qh, qh_ALGORITHMfault, qh_buildhull(), qh_checkconvex(), qh_errexit(), qh_ERRqhull, qh_freebuild(), qh_initbuild(), qh_joggleinput(), qh_JOGGLEmaxretry, qh_option(), REALmax, wmax_, Wretrymax, Zretry, and zzinc_. Referenced by qh_qhull().
00277 { 00278 int restart; 00279 00280 qh ALLOWrestart= True; 00281 while (True) { 00282 restart= setjmp (qh restartexit); /* simple statement for CRAY J916 */ 00283 if (restart) { /* only from qh_precision() */ 00284 zzinc_(Zretry); 00285 wmax_(Wretrymax, qh JOGGLEmax); 00286 qh ERREXITcalled= False; 00287 qh STOPcone= True; /* if break, prevents normal output */ 00288 } 00289 if (!qh RERUN && qh JOGGLEmax < REALmax/2) { 00290 if (qh build_cnt > qh_JOGGLEmaxretry) { 00291 fprintf(qh ferr, "\n\ 00292 qhull precision error: %d attempts to construct a convex hull\n\ 00293 with joggled input. Increase joggle above 'QJ%2.2g'\n\ 00294 or modify qh_JOGGLE... parameters in user.h\n", 00295 qh build_cnt, qh JOGGLEmax); 00296 qh_errexit (qh_ERRqhull, NULL, NULL); 00297 } 00298 if (qh build_cnt && !restart) 00299 break; 00300 }else if (qh build_cnt && qh build_cnt >= qh RERUN) 00301 break; 00302 qh STOPcone= False; 00303 qh_freebuild (True); /* first call is a nop */ 00304 qh build_cnt++; 00305 if (!qh qhull_optionsiz) 00306 qh qhull_optionsiz= strlen (qh qhull_options); 00307 else { 00308 qh qhull_options [qh qhull_optionsiz]= '\0'; 00309 qh qhull_optionlen= 80; 00310 } 00311 qh_option("_run", &qh build_cnt, NULL); 00312 if (qh build_cnt == qh RERUN) { 00313 qh IStracing= qh TRACElastrun; /* duplicated from qh_initqhull_globals */ 00314 if (qh TRACEpoint != -1 || qh TRACEdist < REALmax/2 || qh TRACEmerge) { 00315 qh TRACElevel= (qh IStracing? qh IStracing : 3); 00316 qh IStracing= 0; 00317 } 00318 qhmem.IStracing= qh IStracing; 00319 } 00320 if (qh JOGGLEmax < REALmax/2) 00321 qh_joggleinput(); 00322 qh_initbuild(); 00323 qh_buildhull(); 00324 if (qh JOGGLEmax < REALmax/2 && !qh MERGING) 00325 qh_checkconvex (qh facet_list, qh_ALGORITHMfault); 00326 } 00327 qh ALLOWrestart= False; 00328 } /* qh_build_withrestart */ |
|
Definition at line 352 of file qhull.c. References FORALLfacets, FORALLvertices, vertexT::id, facetT::id, facetT::newfacet, vertexT::newlist, vertexT::point, pointT, qh, qh_addpoint(), qh_errexit(), qh_errprint(), qh_ERRqhull, qh_nextfurthest(), qh_outcoplanar(), qh_pointid(), trace1, and facetT::visible. Referenced by qh_build_withrestart(), and qh_qhull().
00352 { 00353 facetT *facet; 00354 pointT *furthest; 00355 vertexT *vertex; 00356 int id; 00357 00358 trace1((qh ferr, "qh_buildhull: start build hull\n")); 00359 FORALLfacets { 00360 if (facet->visible || facet->newfacet) { 00361 fprintf (qh ferr, "qhull internal error (qh_buildhull): visible or new facet f%d in facet list\n", 00362 facet->id); 00363 qh_errexit (qh_ERRqhull, facet, NULL); 00364 } 00365 } 00366 FORALLvertices { 00367 if (vertex->newlist) { 00368 fprintf (qh ferr, "qhull internal error (qh_buildhull): new vertex f%d in vertex list\n", 00369 vertex->id); 00370 qh_errprint ("ERRONEOUS", NULL, NULL, NULL, vertex); 00371 qh_errexit (qh_ERRqhull, NULL, NULL); 00372 } 00373 id= qh_pointid (vertex->point); 00374 if ((qh STOPpoint>0 && id == qh STOPpoint-1) || 00375 (qh STOPpoint<0 && id == -qh STOPpoint-1) || 00376 (qh STOPcone>0 && id == qh STOPcone-1)) { 00377 trace1((qh ferr,"qh_buildhull: stop point or cone P%d in initial hull\n", id)); 00378 return; 00379 } 00380 } 00381 qh facet_next= qh facet_list; /* advance facet when processed */ 00382 while ((furthest= qh_nextfurthest (&facet))) { 00383 qh num_outside--; /* if ONLYmax, furthest may not be outside */ 00384 if (!qh_addpoint (furthest, facet, qh ONLYmax)) 00385 break; 00386 } 00387 if (qh NARROWhull) /* move points from outsideset to coplanarset */ 00388 qh_outcoplanar( /* facet_list */ ); 00389 if (qh num_outside && !furthest) { 00390 fprintf (qh ferr, "qhull internal error (qh_buildhull): %d outside points were never processed.\n", qh num_outside); 00391 qh_errexit (qh_ERRqhull, NULL, NULL); 00392 } 00393 trace1((qh ferr, "qh_buildhull: completed the hull construction\n")); 00394 } /* buildhull */ |
|
Definition at line 423 of file qhull.c. References FORALLfacets, FORALLvertices, getid_, pointT, qh, qh_CPUclock, qh_distplane(), qh_pointid(), qh_SECticks, realT, facetT::visitid, Zcyclefacettot, Zcyclehorizon, Zdistio, zinc_, Ztotmerge, and zzval_. Referenced by qh_addpoint(), qh_postmerge(), and qh_qhull().
00423 { 00424 realT dist= 0; 00425 float cpu; 00426 int total, furthestid; 00427 time_t timedata; 00428 struct tm *tp; 00429 vertexT *vertex; 00430 00431 qh old_randomdist= qh RANDOMdist; 00432 qh RANDOMdist= False; 00433 if (!furthest) { 00434 time (&timedata); 00435 tp= localtime (&timedata); 00436 cpu= qh_CPUclock - qh hulltime; 00437 cpu /= qh_SECticks; 00438 total= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot); 00439 fprintf (qh ferr, "\n\ 00440 At %02d:%02d:%02d & %2.5g CPU secs, qhull has created %d facets and merged %d.\n\ 00441 The current hull contains %d facets and %d vertices. Last point was p%d\n", 00442 tp->tm_hour, tp->tm_min, tp->tm_sec, cpu, qh facet_id -1, 00443 total, qh num_facets, qh num_vertices, qh furthest_id); 00444 return; 00445 } 00446 furthestid= qh_pointid (furthest); 00447 if (qh TRACEpoint == furthestid) { 00448 qh IStracing= qh TRACElevel; 00449 qhmem.IStracing= qh TRACElevel; 00450 } 00451 if (qh REPORTfreq && (qh facet_id-1 > qh lastreport+qh REPORTfreq)) { 00452 qh lastreport= qh facet_id-1; 00453 time (&timedata); 00454 tp= localtime (&timedata); 00455 cpu= qh_CPUclock - qh hulltime; 00456 cpu /= qh_SECticks; 00457 total= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot); 00458 zinc_(Zdistio); 00459 qh_distplane (furthest, facet, &dist); 00460 fprintf (qh ferr, "\n\ 00461 At %02d:%02d:%02d & %2.5g CPU secs, qhull has created %d facets and merged %d.\n\ 00462 The current hull contains %d facets and %d vertices. There are %d\n\ 00463 outside points. Next is point p%d (v%d), %2.2g above f%d.\n", 00464 tp->tm_hour, tp->tm_min, tp->tm_sec, cpu, qh facet_id -1, 00465 total, qh num_facets, qh num_vertices, qh num_outside+1, 00466 furthestid, qh vertex_id, dist, getid_(facet)); 00467 }else if (qh IStracing >=1) { 00468 cpu= qh_CPUclock - qh hulltime; 00469 cpu /= qh_SECticks; 00470 qh_distplane (furthest, facet, &dist); 00471 fprintf (qh ferr, "qh_addpoint: add p%d (v%d) to hull of %d facets (%2.2g above f%d) and %d outside at %4.4g CPU secs. Previous was p%d.\n", 00472 furthestid, qh vertex_id, qh num_facets, dist, 00473 getid_(facet), qh num_outside+1, cpu, qh furthest_id); 00474 } 00475 if (qh visit_id > (unsigned) INT_MAX) { 00476 qh visit_id= 0; 00477 FORALLfacets 00478 facet->visitid= qh visit_id; 00479 } 00480 if (qh vertex_visit > (unsigned) INT_MAX) { 00481 qh vertex_visit= 0; 00482 FORALLvertices 00483 vertex->visitid= qh vertex_visit; 00484 } 00485 qh furthest_id= furthestid; 00486 qh RANDOMdist= qh old_randomdist; 00487 } /* buildtracing */ |
|
Definition at line 502 of file qhull.c. References qh_errexit(), and qh_errprint(). Referenced by qh_attachnewfacets(), qh_check_bestdist(), qh_check_points(), qh_checkconvex(), qh_facetintersect(), qh_forcedmerges(), qh_makenew_nonsimplicial(), qh_matchduplicates(), qh_matchneighbor(), qh_merge_degenredundant(), qh_mergefacet(), and qh_printextremes_2d().
00502 { 00503 00504 qh_errprint("ERRONEOUS", facet, otherfacet, NULL, NULL); 00505 qh_errexit (exitcode, NULL, NULL); 00506 } /* errexit2 */ |
|
Definition at line 536 of file qhull.c. References facetT::coplanar, facetT::f, FORALLvisible_facets, FOREACHneighbor_, facetT::good, facetT::id, maximize_, facetT::maxoutside, MERGING, minimize_, pointT, qh, qh_appendfacet(), qh_distplane(), qh_errexit(), qh_ERRprec, qh_errprint(), qh_pointid(), qh_precision(), qh_printfacetlist(), qh_printlists(), qh_removefacet(), realT, trace1, trace2, facetT::visible, facetT::visitid, Zcoplanarhorizon, zinc_, Znumvisibility, Ztothorizon, Ztotvisible, and zzinc_. Referenced by qh_addpoint().
00536 { 00537 facetT *neighbor, **neighborp, *visible; 00538 int numhorizon= 0, coplanar= 0; 00539 realT dist; 00540 00541 trace1((qh ferr,"qh_findhorizon: find horizon for point p%d facet f%d\n",qh_pointid(point),facet->id)); 00542 *goodvisible= *goodhorizon= 0; 00543 zinc_(Ztotvisible); 00544 qh_removefacet(facet); /* visible_list at end of qh facet_list */ 00545 qh_appendfacet(facet); 00546 qh num_visible= 1; 00547 if (facet->good) 00548 (*goodvisible)++; 00549 qh visible_list= facet; 00550 facet->visible= True; 00551 facet->f.replace= NULL; 00552 if (qh IStracing >=4) 00553 qh_errprint ("visible", facet, NULL, NULL, NULL); 00554 qh visit_id++; 00555 FORALLvisible_facets { 00556 visible->visitid= qh visit_id; 00557 FOREACHneighbor_(visible) { 00558 if (neighbor->visitid == qh visit_id) 00559 continue; 00560 neighbor->visitid= qh visit_id; 00561 zzinc_(Znumvisibility); 00562 qh_distplane(point, neighbor, &dist); 00563 if (dist > qh MINvisible) { 00564 zinc_(Ztotvisible); 00565 qh_removefacet(neighbor); /* append to end of qh visible_list */ 00566 qh_appendfacet(neighbor); 00567 neighbor->visible= True; 00568 neighbor->f.replace= NULL; 00569 qh num_visible++; 00570 if (neighbor->good) 00571 (*goodvisible)++; 00572 if (qh IStracing >=4) 00573 qh_errprint ("visible", neighbor, NULL, NULL, NULL); 00574 }else { 00575 if (dist > - qh MAXcoplanar) { 00576 neighbor->coplanar= True; 00577 zzinc_(Zcoplanarhorizon); 00578 qh_precision ("coplanar horizon"); 00579 coplanar++; 00580 if (qh MERGING) { 00581 if (dist > 0) { 00582 maximize_(qh max_outside, dist); 00583 maximize_(qh max_vertex, dist); 00584 #if qh_MAXoutside 00585 maximize_(neighbor->maxoutside, dist); 00586 #endif 00587 }else 00588 minimize_(qh min_vertex, dist); /* due to merge later */ 00589 } 00590 trace2((qh ferr, "qh_findhorizon: point p%d is coplanar to horizon f%d, dist=%2.7g < qh MINvisible (%2.7g)\n", 00591 qh_pointid(point), neighbor->id, dist, qh MINvisible)); 00592 }else 00593 neighbor->coplanar= False; 00594 zinc_(Ztothorizon); 00595 numhorizon++; 00596 if (neighbor->good) 00597 (*goodhorizon)++; 00598 if (qh IStracing >=4) 00599 qh_errprint ("horizon", neighbor, NULL, NULL, NULL); 00600 } 00601 } 00602 } 00603 if (!numhorizon) { 00604 qh_precision ("empty horizon"); 00605 fprintf(qh ferr, "qhull precision error (qh_findhorizon): empty horizon\n\ 00606 Point p%d was above all facets.\n", qh_pointid(point)); 00607 qh_printfacetlist (qh facet_list, NULL, True); 00608 qh_errexit(qh_ERRprec, NULL, NULL); 00609 } 00610 trace1((qh ferr, "qh_findhorizon: %d horizon facets (good %d), %d visible (good %d), %d coplanar\n", 00611 numhorizon, *goodhorizon, qh num_visible, *goodvisible, coplanar)); 00612 if (qh IStracing >= 4 && qh num_facets < 50) 00613 qh_printlists (); 00614 } /* findhorizon */ |
|
Definition at line 185 of file global.c. References coordT, free, qh, qh_memfree(), qh_setfree(), realT, and trace5. Referenced by qh_freeqhull().
00185 { 00186 00187 trace5((qh ferr, "qh_freebuffers: freeing up global memory buffers\n")); 00188 /* allocated by qh_initqhull_buffers */ 00189 qh_memfree (qh NEARzero, qh hull_dim * sizeof(realT)); 00190 qh_memfree (qh lower_threshold, (qh input_dim+1) * sizeof(realT)); 00191 qh_memfree (qh upper_threshold, (qh input_dim+1) * sizeof(realT)); 00192 qh_memfree (qh lower_bound, (qh input_dim+1) * sizeof(realT)); 00193 qh_memfree (qh upper_bound, (qh input_dim+1) * sizeof(realT)); 00194 qh_memfree (qh gm_matrix, (qh hull_dim+1) * qh hull_dim * sizeof(coordT)); 00195 qh_memfree (qh gm_row, (qh hull_dim+1) * sizeof(coordT *)); 00196 qh NEARzero= qh lower_threshold= qh upper_threshold= NULL; 00197 qh lower_bound= qh upper_bound= NULL; 00198 qh gm_matrix= NULL; 00199 qh gm_row= NULL; 00200 qh_setfree (&qh other_points); 00201 qh_setfree (&qh del_vertices); 00202 qh_setfree (&qh searchset); 00203 if (qh line) /* allocated by qh_readinput, freed if no error */ 00204 free (qh line); 00205 if (qh half_space) 00206 free (qh half_space); 00207 if (qh temp_malloc) 00208 free (qh temp_malloc); 00209 if (qh feasible_point) /* allocated by qh_readfeasible */ 00210 free (qh feasible_point); 00211 if (qh feasible_string) /* allocated by qh_initflags */ 00212 free (qh feasible_string); 00213 qh line= qh feasible_string= NULL; 00214 qh half_space= qh feasible_point= qh temp_malloc= NULL; 00215 /* usually allocated by qh_readinput */ 00216 if (qh first_point && qh POINTSmalloc) { 00217 free(qh first_point); 00218 qh first_point= NULL; 00219 } 00220 if (qh input_points && qh input_malloc) { /* set by qh_joggleinput */ 00221 free (qh input_points); 00222 qh input_points= NULL; 00223 } 00224 trace5((qh ferr, "qh_freebuffers: finished\n")); 00225 } /* freebuffers */ |
|
Definition at line 249 of file global.c. References boolT, facetT::coplanarset, FORALLfacets, FORALLvertices, FOREACHmerge_, FOREACHridge_, facetT::neighbors, vertexT::neighbors, facetT::next, vertexT::next, otherfacet_, facetT::outsideset, qh, qh_ASnone, qh_clearcenters(), qh_delfacet(), qh_delvertex(), qh_memfree(), qh_setfree(), qh_setfreelong(), qh_settempfree_all(), qh_settruncate(), facetT::ridges, ridgeT::seen, facetT::simplicial, trace1, facetT::vertices, ridgeT::vertices, and facetT::visible. Referenced by qh_build_withrestart(), and qh_freeqhull().
00249 { 00250 facetT *facet; 00251 vertexT *vertex; 00252 ridgeT *ridge, **ridgep; 00253 mergeT *merge, **mergep; 00254 00255 trace1((qh ferr, "qh_freebuild: free memory from qh_inithull and qh_buildhull\n")); 00256 if (qh del_vertices) 00257 qh_settruncate (qh del_vertices, 0); 00258 if (allmem) { 00259 qh_clearcenters (qh_ASnone); 00260 while ((vertex= qh vertex_list)) { 00261 if (vertex->next) 00262 qh_delvertex (vertex); 00263 else { 00264 qh_memfree (vertex, sizeof(vertexT)); 00265 qh newvertex_list= qh vertex_list= NULL; 00266 } 00267 } 00268 }else if (qh VERTEXneighbors) { 00269 FORALLvertices 00270 qh_setfreelong (&(vertex->neighbors)); 00271 } 00272 qh VERTEXneighbors= False; 00273 qh GOODclosest= NULL; 00274 if (allmem) { 00275 FORALLfacets { 00276 FOREACHridge_(facet->ridges) 00277 ridge->seen= False; 00278 } 00279 FORALLfacets { 00280 if (facet->visible) { 00281 FOREACHridge_(facet->ridges) { 00282 if (!otherfacet_(ridge, facet)->visible) 00283 ridge->seen= True; /* an unattached ridge */ 00284 } 00285 } 00286 } 00287 while ((facet= qh facet_list)) { 00288 FOREACHridge_(facet->ridges) { 00289 if (ridge->seen) { 00290 qh_setfree(&(ridge->vertices)); 00291 qh_memfree(ridge, sizeof(ridgeT)); 00292 }else 00293 ridge->seen= True; 00294 } 00295 qh_setfree (&(facet->outsideset)); 00296 qh_setfree (&(facet->coplanarset)); 00297 qh_setfree (&(facet->neighbors)); 00298 qh_setfree (&(facet->ridges)); 00299 qh_setfree (&(facet->vertices)); 00300 if (facet->next) 00301 qh_delfacet (facet); 00302 else { 00303 qh_memfree (facet, sizeof(facetT)); 00304 qh visible_list= qh newfacet_list= qh facet_list= NULL; 00305 } 00306 } 00307 }else { 00308 FORALLfacets { 00309 qh_setfreelong (&(facet->outsideset)); 00310 qh_setfreelong (&(facet->coplanarset)); 00311 if (!facet->simplicial) { 00312 qh_setfreelong (&(facet->neighbors)); 00313 qh_setfreelong (&(facet->ridges)); 00314 qh_setfreelong (&(facet->vertices)); 00315 } 00316 } 00317 } 00318 qh_setfree (&(qh hash_table)); 00319 qh_memfree (qh interior_point, qh normal_size); 00320 qh interior_point= NULL; 00321 FOREACHmerge_(qh facet_mergeset) /* usually empty */ 00322 qh_memfree (merge, sizeof(mergeT)); 00323 qh facet_mergeset= NULL; /* temp set */ 00324 qh degen_mergeset= NULL; /* temp set */ 00325 qh_settempfree_all(); 00326 } /* freebuild */ |
|
|
|
Definition at line 638 of file qhull.c. References FORALLfacet_, FORALLfacets, facetT::furthestdist, facetT::next, facetT::notfurthest, facetT::outsideset, pointT, qh, qh_distplane(), qh_errexit(), qh_ERRqhull, qh_furthestnext(), qh_furthestout(), qh_prependfacet(), qh_RANDOMint, qh_RANDOMmax, qh_removefacet(), qh_setdellast(), qh_setdelnth(), qh_setfree(), qh_setlast(), qh_setsize(), realT, SETreturnsize_, Zcomputefurthest, and zinc_. Referenced by qh_buildhull().
00638 { 00639 facetT *facet; 00640 int size, index; 00641 realT randr, dist; 00642 pointT *furthest; 00643 00644 while ((facet= qh facet_next) != qh facet_tail) { 00645 if (!facet->outsideset) { 00646 qh facet_next= facet->next; 00647 continue; 00648 } 00649 SETreturnsize_(facet->outsideset, size); 00650 if (!size) { 00651 qh_setfree (&facet->outsideset); 00652 qh facet_next= facet->next; 00653 continue; 00654 } 00655 if (qh NARROWhull) { 00656 if (facet->notfurthest) 00657 qh_furthestout (facet); 00658 furthest= (pointT*)qh_setlast (facet->outsideset); 00659 #if qh_COMPUTEfurthest 00660 qh_distplane (furthest, facet, &dist); 00661 zinc_(Zcomputefurthest); 00662 #else 00663 dist= facet->furthestdist; 00664 #endif 00665 if (dist < qh MINoutside) { /* remainder of outside set is coplanar for qh_outcoplanar */ 00666 qh facet_next= facet->next; 00667 continue; 00668 } 00669 } 00670 if (!qh RANDOMoutside && !qh VIRTUALmemory) { 00671 if (qh PICKfurthest) { 00672 qh_furthestnext (/* qh facet_list */); 00673 facet= qh facet_next; 00674 } 00675 *visible= facet; 00676 return ((pointT*)qh_setdellast (facet->outsideset)); 00677 } 00678 if (qh RANDOMoutside) { 00679 int outcoplanar = 0; 00680 if (qh NARROWhull) { 00681 FORALLfacets { 00682 if (facet == qh facet_next) 00683 break; 00684 if (facet->outsideset) 00685 outcoplanar += qh_setsize( facet->outsideset); 00686 } 00687 } 00688 randr= qh_RANDOMint; 00689 randr= randr/(qh_RANDOMmax+1); 00690 index= (int)floor((qh num_outside - outcoplanar) * randr); 00691 FORALLfacet_(qh facet_next) { 00692 if (facet->outsideset) { 00693 SETreturnsize_(facet->outsideset, size); 00694 if (!size) 00695 qh_setfree (&facet->outsideset); 00696 else if (size > index) { 00697 *visible= facet; 00698 return ((pointT*)qh_setdelnth (facet->outsideset, index)); 00699 }else 00700 index -= size; 00701 } 00702 } 00703 fprintf (qh ferr, "qhull internal error (qh_nextfurthest): num_outside %d is too low\nby at least %d, or a random real %g >= 1.0\n", 00704 qh num_outside, index+1, randr); 00705 qh_errexit (qh_ERRqhull, NULL, NULL); 00706 }else { /* VIRTUALmemory */ 00707 facet= qh facet_tail->previous; 00708 if (!(furthest= (pointT*)qh_setdellast(facet->outsideset))) { 00709 if (facet->outsideset) 00710 qh_setfree (&facet->outsideset); 00711 qh_removefacet (facet); 00712 qh_prependfacet (facet, &qh facet_list); 00713 continue; 00714 } 00715 *visible= facet; 00716 return furthest; 00717 } 00718 } 00719 return NULL; 00720 } /* nextfurthest */ |
|
Definition at line 1832 of file global.c. References i, maximize_, qh, r, and realT. Referenced by qh_build_withrestart(), qh_detroundoff(), qh_initflags(), qh_initialhull(), qh_initqhull_globals(), and qh_joggleinput().
01832 { 01833 char buf[200]; 01834 int len, maxlen; 01835 01836 sprintf (buf, " %s", option); 01837 if (i) 01838 sprintf (buf+strlen(buf), " %d", *i); 01839 if (r) 01840 sprintf (buf+strlen(buf), " %2.2g", *r); 01841 len= strlen(buf); 01842 qh qhull_optionlen += len; 01843 maxlen= sizeof (qh qhull_options) - len -1; 01844 maximize_(maxlen, 0); 01845 if (qh qhull_optionlen >= 80 && maxlen > 0) { 01846 qh qhull_optionlen= len; 01847 strncat (qh qhull_options, "\n", maxlen--); 01848 } 01849 strncat (qh qhull_options, buf, maxlen); 01850 } /* option */ |
|
Definition at line 754 of file qhull.c. References FORALLfacets, FOREACHpoint_i_, FOREACHvertex_, facetT::furthestdist, i, MERGING, num_points, facetT::outsideset, vertexT::point, pointT, qh, qh_DISToutside, qh_distplane(), qh_partitionpoint(), qh_pointid(), qh_printfacetlist(), qh_setappend(), qh_setfree(), qh_setnew(), qh_settemp(), qh_settempfree(), qh_settruncate(), REALmax, realT, SETaddr_, SETelem_, trace1, Zpartition, Zpartitionall, Ztotpartition, zval_, zzadd_, zzinc_, and zzval_. Referenced by qh_initbuild().
00754 { 00755 setT *pointset; 00756 vertexT *vertex, **vertexp; 00757 pointT *point, **pointp, *bestpoint; 00758 int size, point_i, point_n, point_end, remaining, i, id; 00759 facetT *facet; 00760 realT bestdist= -REALmax, dist, distoutside; 00761 00762 trace1((qh ferr, "qh_partitionall: partition all points into outside sets\n")); 00763 pointset= qh_settemp (numpoints); 00764 qh num_outside= 0; 00765 pointp= SETaddr_(pointset, pointT); 00766 for (i=numpoints, point= points; i--; point += qh hull_dim) 00767 *(pointp++)= point; 00768 qh_settruncate (pointset, numpoints); 00769 FOREACHvertex_(vertices) { 00770 if ((id= qh_pointid(vertex->point)) >= 0) 00771 SETelem_(pointset, id)= NULL; 00772 } 00773 id= qh_pointid (qh GOODpointp); 00774 if (id >=0 && qh STOPcone-1 != id && -qh STOPpoint-1 != id) 00775 SETelem_(pointset, id)= NULL; 00776 if (qh GOODvertexp && qh ONLYgood && !qh MERGING) { /* matches qhull()*/ 00777 if ((id= qh_pointid(qh GOODvertexp)) >= 0) 00778 SETelem_(pointset, id)= NULL; 00779 } 00780 if (!qh BESToutside) { /* matches conditional for qh_partitionpoint below */ 00781 if (qh MERGING) 00782 distoutside= qh_DISToutside; /* defined in user.h */ 00783 else 00784 distoutside= qh MINoutside; 00785 zval_(Ztotpartition)= qh num_points - qh hull_dim - 1; /*misses GOOD... */ 00786 remaining= qh num_facets; 00787 point_end= numpoints; 00788 FORALLfacets { 00789 size= point_end/(remaining--) + 100; 00790 facet->outsideset= qh_setnew (size); 00791 bestpoint= NULL; 00792 point_end= 0; 00793 FOREACHpoint_i_(pointset) { 00794 if (point) { 00795 zzinc_(Zpartitionall); 00796 qh_distplane (point, facet, &dist); 00797 if (dist < distoutside) 00798 SETelem_(pointset, point_end++)= point; 00799 else { 00800 qh num_outside++; 00801 if (!bestpoint) { 00802 bestpoint= point; 00803 bestdist= dist; 00804 }else if (dist > bestdist) { 00805 qh_setappend (&facet->outsideset, bestpoint); 00806 bestpoint= point; 00807 bestdist= dist; 00808 }else 00809 qh_setappend (&facet->outsideset, point); 00810 } 00811 } 00812 } 00813 if (bestpoint) { 00814 qh_setappend (&facet->outsideset, bestpoint); 00815 #if !qh_COMPUTEfurthest 00816 facet->furthestdist= bestdist; 00817 #endif 00818 }else 00819 qh_setfree (&facet->outsideset); 00820 qh_settruncate (pointset, point_end); 00821 } 00822 } 00823 if (qh BESToutside || qh MERGING || qh KEEPcoplanar || qh KEEPinside) { 00824 qh findbestnew= True; 00825 FOREACHpoint_i_(pointset) { 00826 if (point) 00827 qh_partitionpoint(point, qh facet_list); 00828 } 00829 qh findbestnew= False; 00830 } 00831 zzadd_(Zpartitionall, zzval_(Zpartition)); 00832 zzval_(Zpartition)= 0; 00833 qh_settempfree(&pointset); 00834 if (qh IStracing >= 4) 00835 qh_printfacetlist (qh facet_list, NULL, True); 00836 } /* partitionall */ |
|
Definition at line 872 of file qhull.c. References boolT, facetT::coplanarset, facetT::id, pointT, qh, qh_ALL, qh_distplane(), qh_errprint(), qh_findbest(), qh_findbestnew(), qh_NOupper, qh_pointid(), qh_setappend(), qh_setappend2ndlast(), qh_setlast(), realT, trace4, Zcomputefurthest, Zcoplanarinside, zinc_, Zpartcoplanar, Ztotpartcoplanar, and zzadd_. Referenced by qh_addpoint(), qh_outcoplanar(), qh_partitionpoint(), and qh_partitionvisible().
00872 { 00873 facetT *bestfacet; 00874 pointT *oldfurthest; 00875 realT bestdist, dist2; 00876 int numpart= 0; 00877 boolT isoutside, istrace= False; 00878 00879 qh WAScoplanar= True; 00880 if (!dist) { 00881 if (qh findbestnew) 00882 bestfacet= qh_findbestnew (point, facet, 00883 &bestdist, NULL, &numpart); 00884 else 00885 bestfacet= qh_findbest (point, facet, qh_ALL, False, !qh_NOupper, 00886 &bestdist, &isoutside, &numpart); 00887 zinc_(Ztotpartcoplanar); 00888 zzadd_(Zpartcoplanar, numpart); 00889 if (!qh KEEPinside) { 00890 if (qh KEEPnearinside) { 00891 if (bestdist < -qh NEARinside) { 00892 zinc_(Zcoplanarinside); 00893 return; 00894 } 00895 }else if (bestdist < -qh MAXcoplanar) { 00896 zinc_(Zcoplanarinside); 00897 return; 00898 } 00899 } 00900 }else { 00901 bestfacet= facet; 00902 bestdist= *dist; 00903 } 00904 if (qh KEEPcoplanar + qh KEEPinside + qh KEEPnearinside) { 00905 oldfurthest= (pointT*)qh_setlast (bestfacet->coplanarset); 00906 if (oldfurthest) { 00907 zinc_(Zcomputefurthest); 00908 qh_distplane (oldfurthest, bestfacet, &dist2); 00909 } 00910 if (!oldfurthest || dist2 < bestdist) { 00911 qh_setappend(&bestfacet->coplanarset, point); 00912 if (bestdist > qh max_outside) { 00913 qh max_outside= bestdist; 00914 if (bestdist > qh TRACEdist) 00915 istrace= True; 00916 } 00917 }else 00918 qh_setappend2ndlast(&bestfacet->coplanarset, point); 00919 }else { /* !KEEPcoplanar && !KEEPinside */ 00920 if (bestdist > qh max_outside) { 00921 qh max_outside= bestdist; 00922 if (bestdist > qh TRACEdist) 00923 istrace= True; 00924 } 00925 } 00926 if (istrace) { 00927 fprintf (qh ferr, "qh_partitioncoplanar: ====== p%d increases max_outside to %2.2g of f%d last p%d\n", 00928 qh_pointid(point), bestdist, bestfacet->id, qh furthest_id); 00929 qh_errprint ("DISTANT", bestfacet, NULL, NULL, NULL); 00930 } 00931 trace4((qh ferr, "qh_partitioncoplanar: point p%d is coplanar with facet f%d (or inside) dist %2.2g\n", 00932 qh_pointid(point), bestfacet->id, bestdist)); 00933 } /* partitioncoplanar */ |
|
Definition at line 970 of file qhull.c. References boolT, facetT::furthestdist, facetT::id, facetT::newfacet, facetT::outsideset, pointT, qh, qh_appendfacet(), qh_distplane(), qh_findbest(), qh_findbestnew(), qh_NOupper, qh_partitioncoplanar(), qh_pointid(), qh_precision(), qh_removefacet(), qh_setappend(), qh_setappend2ndlast(), qh_setlast(), realT, trace4, Zcomputefurthest, Zcoplanarpart, zinc_, Zpartinside, Zpartition, Zpartnear, Ztotpartition, zzadd_, and zzinc_. Referenced by qh_partitionall(), and qh_partitionvisible().
00970 { 00971 realT bestdist; 00972 boolT isoutside; 00973 facetT *bestfacet; 00974 int numpart; 00975 #if qh_COMPUTEfurthest 00976 realT dist; 00977 #endif 00978 00979 if (qh findbestnew) 00980 bestfacet= qh_findbestnew (point, facet, 00981 &bestdist, &isoutside, &numpart); 00982 else 00983 bestfacet= qh_findbest (point, facet, qh BESToutside, True, !qh_NOupper, 00984 &bestdist, &isoutside, &numpart); 00985 zinc_(Ztotpartition); 00986 zzadd_(Zpartition, numpart); 00987 if (qh NARROWhull) { 00988 if (qh DELAUNAY && !isoutside && bestdist >= -qh MAXcoplanar) 00989 qh_precision ("nearly incident point (narrow hull)"); 00990 if (qh KEEPnearinside) { 00991 if (bestdist >= -qh NEARinside) 00992 isoutside= True; 00993 }else if (bestdist >= -qh MAXcoplanar) 00994 isoutside= True; 00995 } 00996 00997 if (isoutside) { 00998 if (!bestfacet->outsideset 00999 || !qh_setlast (bestfacet->outsideset)) { 01000 qh_setappend(&(bestfacet->outsideset), point); 01001 if (!bestfacet->newfacet) { 01002 qh_removefacet (bestfacet); /* make sure it's after qh facet_next */ 01003 qh_appendfacet (bestfacet); 01004 } 01005 #if !qh_COMPUTEfurthest 01006 bestfacet->furthestdist= bestdist; 01007 #endif 01008 }else { 01009 #if qh_COMPUTEfurthest 01010 zinc_(Zcomputefurthest); 01011 qh_distplane (oldfurthest, bestfacet, &dist); 01012 if (dist < bestdist) 01013 qh_setappend(&(bestfacet->outsideset), point); 01014 else 01015 qh_setappend2ndlast(&(bestfacet->outsideset), point); 01016 #else 01017 if (bestfacet->furthestdist < bestdist) { 01018 qh_setappend(&(bestfacet->outsideset), point); 01019 bestfacet->furthestdist= bestdist; 01020 }else 01021 qh_setappend2ndlast(&(bestfacet->outsideset), point); 01022 #endif 01023 } 01024 qh num_outside++; 01025 trace4((qh ferr, "qh_partitionpoint: point p%d is outside facet f%d\n", 01026 qh_pointid(point), bestfacet->id)); 01027 }else if (bestdist >= -qh MAXcoplanar) { 01028 zzinc_(Zcoplanarpart); 01029 if (qh DELAUNAY) 01030 qh_precision ("nearly incident point"); 01031 if (qh KEEPcoplanar + qh KEEPnearinside || bestdist > qh max_outside) 01032 qh_partitioncoplanar (point, bestfacet, &bestdist); 01033 }else if (qh KEEPnearinside && bestdist > -qh NEARinside) { 01034 zinc_(Zpartnear); 01035 qh_partitioncoplanar (point, bestfacet, &bestdist); 01036 }else { 01037 zinc_(Zpartinside); 01038 trace4((qh ferr, "qh_partitionpoint: point p%d is inside all facets, closest to f%d dist %2.2g\n", 01039 qh_pointid(point), bestfacet->id, bestdist)); 01040 if (qh KEEPinside) 01041 qh_partitioncoplanar (point, bestfacet, &bestdist); 01042 } 01043 } /* partitionpoint */ |
|
Definition at line 1079 of file qhull.c. References boolT, facetT::coplanarset, facetT::f, FORALLvisible_facets, FOREACHpoint_, FOREACHvertex_, maximize_, facetT::outsideset, vertexT::point, pointT, qh, qh_infiniteloop(), qh_partitioncoplanar(), qh_partitionpoint(), qh_setsize(), trace1, and facetT::visible. Referenced by qh_addpoint(), and qh_qhull().
01079 { 01080 facetT *visible, *newfacet; 01081 pointT *point, **pointp; 01082 int coplanar=0, size; 01083 unsigned count; 01084 vertexT *vertex, **vertexp; 01085 01086 if (qh ONLYmax) 01087 maximize_(qh MINoutside, qh max_vertex); 01088 *numoutside= 0; 01089 FORALLvisible_facets { 01090 if (!visible->outsideset && !visible->coplanarset) 01091 continue; 01092 newfacet= visible->f.replace; 01093 count= 0; 01094 while (newfacet && newfacet->visible) { 01095 newfacet= newfacet->f.replace; 01096 if (count++ > qh facet_id) 01097 qh_infiniteloop (visible); 01098 } 01099 if (!newfacet) 01100 newfacet= qh newfacet_list; 01101 if (visible->outsideset) { 01102 size= qh_setsize (visible->outsideset); 01103 *numoutside += size; 01104 qh num_outside -= size; 01105 FOREACHpoint_(visible->outsideset) 01106 qh_partitionpoint (point, newfacet); 01107 } 01108 if (visible->coplanarset && (qh KEEPcoplanar + qh KEEPinside + qh KEEPnearinside)) { 01109 size= qh_setsize (visible->coplanarset); 01110 coplanar += size; 01111 FOREACHpoint_(visible->coplanarset) { 01112 if (allpoints) 01113 qh_partitionpoint (point, newfacet); 01114 else 01115 qh_partitioncoplanar (point, newfacet, NULL); 01116 } 01117 } 01118 } 01119 FOREACHvertex_(qh del_vertices) { 01120 if (vertex->point) { 01121 if (allpoints) 01122 qh_partitionpoint (vertex->point, qh newfacet_list); 01123 else 01124 qh_partitioncoplanar (vertex->point, qh newfacet_list, NULL); 01125 } 01126 } 01127 trace1((qh ferr,"qh_partitionvisible: partitioned %d points from outsidesets and %d points from coplanarsets\n", *numoutside, coplanar)); 01128 } /* partitionvisible */ |
|
Definition at line 1138 of file qhull.c. References qh, qh_ERRprec, REALmax, and trace0. Referenced by qh_backnormal(), qh_checkconvex(), qh_checkflipped(), qh_findhorizon(), qh_gausselim(), qh_initialhull(), qh_matchduplicates(), qh_matchneighbor(), qh_maxsimplex(), and qh_partitionpoint().
|
|
Definition at line 1161 of file qhull.c. References facetT::coplanarset, FORALLfacets, facetT::good, MERGING, num_points, qh, qh_outerinner(), qh_pointid(), qh_SECticks, qh_setsize(), qh_stddev(), REALmax, realT, facetT::simplicial, facetT::vertices, Wcpu, Wnewbalance, Wnewbalance2, Wpbalance, Wpbalance2, wval_, Zbestdist, Zcentrumtests, Zcyclefacettot, Zcyclehorizon, Zdistcheck, Zdistconvex, Zdistzero, Znumvisibility, Zpartcoplanar, Zpartition, Zpartitionall, Zpbalance, Zprocessed, Zretry, Zsetplane, Ztotmerge, zval_, and zzval_. Referenced by qh_errexit(), qh_postmerge(), qh_produce_output(), and qh_setfacetplane().
01161 { 01162 realT ratio, outerplane, innerplane; 01163 float cpu; 01164 int size, id, nummerged, numvertices, numcoplanars= 0, nonsimplicial=0; 01165 int goodused; 01166 facetT *facet; 01167 char *s; 01168 01169 size= qh num_points + qh_setsize (qh other_points); 01170 numvertices= qh num_vertices - qh_setsize (qh del_vertices); 01171 id= qh_pointid (qh GOODpointp); 01172 FORALLfacets { 01173 if (facet->coplanarset) 01174 numcoplanars += qh_setsize( facet->coplanarset); 01175 if (facet->good) { 01176 if (!facet->simplicial && qh_setsize(facet->vertices) != qh hull_dim) 01177 nonsimplicial++; 01178 } 01179 } 01180 if (id >=0 && qh STOPcone-1 != id && -qh STOPpoint-1 != id) 01181 size--; 01182 if (qh STOPcone || qh STOPpoint) 01183 fprintf (fp, "\nAt a premature exit due to 'TVn', 'TCn', or precision error."); 01184 if (qh UPPERdelaunay) 01185 goodused= qh GOODvertex + qh GOODpoint + qh SPLITthresholds; 01186 else if (qh DELAUNAY) 01187 goodused= qh GOODvertex + qh GOODpoint + qh GOODthreshold; 01188 else 01189 goodused= qh num_good; 01190 nummerged= zzval_(Ztotmerge) - zzval_(Zcyclehorizon) + zzval_(Zcyclefacettot); 01191 if (qh VORONOI) { 01192 if (qh UPPERdelaunay) 01193 fprintf (fp, "\n\ 01194 Furthest-site Voronoi vertices by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01195 else 01196 fprintf (fp, "\n\ 01197 Voronoi diagram by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01198 fprintf(fp, " Number of Voronoi regions%s: %d\n", 01199 qh ATinfinity ? " and at-infinity" : "", numvertices); 01200 if (numcoplanars) 01201 fprintf(fp, " Number of nearly incident points: %d\n", numcoplanars); 01202 else if (size > numvertices) 01203 fprintf(fp, " Total number of nearly incident points: %d\n", size - numvertices); 01204 fprintf(fp, " Number of%s Voronoi vertices: %d\n", 01205 goodused ? " 'good'" : "", qh num_good); 01206 if (nonsimplicial) 01207 fprintf(fp, " Number of%s non-simplicial Voronoi vertices: %d\n", 01208 goodused ? " 'good'" : "", nonsimplicial); 01209 }else if (qh DELAUNAY) { 01210 if (qh UPPERdelaunay) 01211 fprintf (fp, "\n\ 01212 Furthest-site Delaunay triangulation by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01213 else 01214 fprintf (fp, "\n\ 01215 Delaunay triangulation by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01216 fprintf(fp, " Number of input sites%s: %d\n", 01217 qh ATinfinity ? " and at-infinity" : "", numvertices); 01218 if (numcoplanars) 01219 fprintf(fp, " Number of nearly incident points: %d\n", numcoplanars); 01220 else if (size > numvertices) 01221 fprintf(fp, " Total number of nearly incident points: %d\n", size - numvertices); 01222 fprintf(fp, " Number of%s Delaunay regions: %d\n", 01223 goodused ? " 'good'" : "", qh num_good); 01224 if (nonsimplicial) 01225 fprintf(fp, " Number of%s non-simplicial Delaunay regions: %d\n", 01226 goodused ? " 'good'" : "", nonsimplicial); 01227 }else if (qh HALFspace) { 01228 fprintf (fp, "\n\ 01229 Halfspace intersection by the convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01230 fprintf(fp, " Number of halfspaces: %d\n", size); 01231 fprintf(fp, " Number of non-redundant halfspaces: %d\n", numvertices); 01232 if (numcoplanars) { 01233 if (qh KEEPinside && qh KEEPcoplanar) 01234 s= "similar and redundant"; 01235 else if (qh KEEPinside) 01236 s= "redundant"; 01237 else 01238 s= "similar"; 01239 fprintf(fp, " Number of %s halfspaces: %d\n", s, numcoplanars); 01240 } 01241 fprintf(fp, " Number of intersection points: %d\n", qh num_facets - qh num_visible); 01242 if (goodused) 01243 fprintf(fp, " Number of 'good' intersection points: %d\n", qh num_good); 01244 if (nonsimplicial) 01245 fprintf(fp, " Number of%s non-simplicial intersection points: %d\n", 01246 goodused ? " 'good'" : "", nonsimplicial); 01247 }else { 01248 fprintf (fp, "\n\ 01249 Convex hull of %d points in %d-d:\n\n", size, qh hull_dim); 01250 fprintf(fp, " Number of vertices: %d\n", numvertices); 01251 if (numcoplanars) { 01252 if (qh KEEPinside && qh KEEPcoplanar) 01253 s= "coplanar and interior"; 01254 else if (qh KEEPinside) 01255 s= "interior"; 01256 else 01257 s= "coplanar"; 01258 fprintf(fp, " Number of %s points: %d\n", s, numcoplanars); 01259 } 01260 fprintf(fp, " Number of facets: %d\n", qh num_facets - qh num_visible); 01261 if (goodused) 01262 fprintf(fp, " Number of 'good' facets: %d\n", qh num_good); 01263 if (nonsimplicial) 01264 fprintf(fp, " Number of%s non-simplicial facets: %d\n", 01265 goodused ? " 'good'" : "", nonsimplicial); 01266 } 01267 fprintf(fp, "\nStatistics for: %s | %s", 01268 qh rbox_command, qh qhull_command); 01269 if (qh ROTATErandom != INT_MIN) 01270 fprintf(fp, " QR%d\n\n", qh ROTATErandom); 01271 else 01272 fprintf(fp, "\n\n"); 01273 fprintf(fp, " Number of points processed: %d\n", zzval_(Zprocessed)); 01274 fprintf(fp, " Number of hyperplanes created: %d\n", zzval_(Zsetplane)); 01275 if (qh DELAUNAY) 01276 fprintf(fp, " Number of facets in hull: %d\n", qh num_facets - qh num_visible); 01277 fprintf(fp, " Number of distance tests for qhull: %d\n", zzval_(Zpartition)+ 01278 zzval_(Zpartitionall)+zzval_(Znumvisibility)+zzval_(Zpartcoplanar)); 01279 #if 0 /* NOTE: must print before printstatistics() */ 01280 {realT stddev, ave; 01281 fprintf(fp, " average new facet balance: %2.2g\n", 01282 wval_(Wnewbalance)/zval_(Zprocessed)); 01283 stddev= qh_stddev (zval_(Zprocessed), wval_(Wnewbalance), 01284 wval_(Wnewbalance2), &ave); 01285 fprintf(fp, " new facet standard deviation: %2.2g\n", stddev); 01286 fprintf(fp, " average partition balance: %2.2g\n", 01287 wval_(Wpbalance)/zval_(Zpbalance)); 01288 stddev= qh_stddev (zval_(Zpbalance), wval_(Wpbalance), 01289 wval_(Wpbalance2), &ave); 01290 fprintf(fp, " partition standard deviation: %2.2g\n", stddev); 01291 } 01292 #endif 01293 if (nummerged) { 01294 fprintf(fp," Number of merged facets: %d\n", nummerged); 01295 fprintf(fp," Number of distance tests for merging: %d\n",zzval_(Zbestdist)+ 01296 zzval_(Zcentrumtests)+zzval_(Zdistconvex)+zzval_(Zdistcheck)+ 01297 zzval_(Zdistzero)); 01298 } 01299 if (!qh RANDOMoutside && qh QHULLfinished) { 01300 cpu= qh hulltime; 01301 cpu /= qh_SECticks; 01302 wval_(Wcpu)= cpu; 01303 fprintf (fp, " CPU seconds to compute hull (after input): %2.4g\n", cpu); 01304 } 01305 if (qh RERUN) { 01306 if (!qh PREmerge && !qh MERGEexact) 01307 fprintf(fp, " Percentage of runs with precision errors: %4.1f\n", 01308 zzval_(Zretry)*100.0/qh build_cnt); /* careful of order */ 01309 }else if (qh JOGGLEmax < REALmax/2) { 01310 if (zzval_(Zretry)) 01311 fprintf(fp, " After %d retries, input joggled by: %2.2g\n", 01312 zzval_(Zretry), qh JOGGLEmax); 01313 else 01314 fprintf(fp, " Input joggled by: %2.2g\n", qh JOGGLEmax); 01315 } 01316 if (qh totarea != 0.0) 01317 fprintf(fp, " %s facet area: %2.8g\n", 01318 zzval_(Ztotmerge) ? "Approximate" : "Total", qh totarea); 01319 if (qh totvol != 0.0) 01320 fprintf(fp, " %s volume: %2.8g\n", 01321 zzval_(Ztotmerge) ? "Approximate" : "Total", qh totvol); 01322 if (qh MERGING) { 01323 qh_outerinner (NULL, &outerplane, &innerplane); 01324 if (outerplane > 2 * qh DISTround) { 01325 fprintf(fp, " Maximum distance of %spoint above facet: %2.2g", 01326 (qh QHULLfinished ? "" : "merged "), outerplane); 01327 ratio= outerplane/(qh ONEmerge + qh DISTround); 01328 if (ratio > 0.05 && qh ONEmerge > qh MINoutside && qh JOGGLEmax > REALmax/2) 01329 fprintf (fp, " (%.1fx)\n", ratio); 01330 else 01331 fprintf (fp, "\n"); 01332 } 01333 if (innerplane < -2 * qh DISTround) { 01334 fprintf(fp, " Maximum distance of %svertex below facet: %2.2g", 01335 (qh QHULLfinished ? "" : "merged "), innerplane); 01336 ratio= -innerplane/(qh ONEmerge+qh DISTround); 01337 if (ratio > 0.05 && qh JOGGLEmax > REALmax/2) 01338 fprintf (fp, " (%.1fx)\n", ratio); 01339 else 01340 fprintf (fp, "\n"); 01341 } 01342 } 01343 fprintf(fp, "\n"); 01344 } /* printsummary */ |
|
Definition at line 57 of file qhull.c. References qh, qh_ALL, qh_build_withrestart(), qh_buildhull(), qh_buildtracing(), qh_check_maxout(), qh_checkzero(), qh_CPUclock, qh_deletevisible(), qh_DIMreduceBuild, qh_errexit(), qh_ERRqhull, qh_initbuild(), qh_nearcoplanar(), qh_partitionvisible(), qh_postmerge(), qh_resetlists(), qh_setsize(), REALmax, trace1, and trace2. Referenced by main(), and qh_new_qhull().
00057 { 00058 int numoutside; 00059 00060 qh hulltime= qh_CPUclock; 00061 if (qh RERUN || qh JOGGLEmax < REALmax/2) 00062 qh_build_withrestart(); 00063 else { 00064 qh_initbuild(); 00065 qh_buildhull(); 00066 } 00067 if (!qh STOPpoint && !qh STOPcone) { 00068 if (qh ZEROall_ok && !qh TESTvneighbors && qh MERGEexact) 00069 qh_checkzero( qh_ALL); 00070 if (qh ZEROall_ok && !qh TESTvneighbors && !qh WAScoplanar) { 00071 trace2((qh ferr, "qh_qhull: all facets are clearly convex and no coplanar points. Post-merging and check of maxout not needed.\n")); 00072 }else { 00073 if (qh MERGEexact || (qh hull_dim > qh_DIMreduceBuild && qh PREmerge)) 00074 qh_postmerge ("First post-merge", qh premerge_centrum, qh premerge_cos, 00075 (qh POSTmerge ? False : qh TESTvneighbors)); 00076 else if (!qh POSTmerge && qh TESTvneighbors) 00077 qh_postmerge ("For testing vertex neighbors", qh premerge_centrum, 00078 qh premerge_cos, True); 00079 if (qh POSTmerge) 00080 qh_postmerge ("For post-merging", qh postmerge_centrum, 00081 qh postmerge_cos, qh TESTvneighbors); 00082 if (qh visible_list == qh facet_list) { /* i.e., merging done */ 00083 qh findbestnew= True; 00084 qh_partitionvisible (/*visible_list, newfacet_list*/ !qh_ALL, &numoutside); 00085 qh findbestnew= False; 00086 qh_deletevisible (/*qh visible_list*/); 00087 qh_resetlists (False /*qh visible_list newvertex_list newfacet_list */); 00088 } 00089 if (qh DOcheckmax){ 00090 if (qh REPORTfreq) { 00091 qh_buildtracing (NULL, NULL); 00092 fprintf (qh ferr, "\nTesting all coplanar points.\n"); 00093 } 00094 qh_check_maxout(); 00095 } 00096 } 00097 } 00098 if (qh KEEPnearinside && !qh maxoutdone) 00099 qh_nearcoplanar(); 00100 if (qh_setsize ((setT*)qhmem.tempstack) != 0) { 00101 fprintf (qh ferr, "qhull internal error (qh_qhull): temporary sets not empty (%d)\n", 00102 qh_setsize ((setT*)qhmem.tempstack)); 00103 qh_errexit (qh_ERRqhull, NULL, NULL); 00104 } 00105 qh hulltime= qh_CPUclock - qh hulltime; 00106 qh QHULLfinished= True; 00107 trace1((qh ferr, "qh_qhull: algorithm completed\n")); 00108 } /* qhull */ |
|
Definition at line 1942 of file global.c. References strtod(). Referenced by qh_checkflags(), qh_initflags(), qh_initthresholds(), qh_readfeasible(), qh_readpoints(), and qh_setfeasible().
01942 { 01943 double result; 01944 01945 result= strtod (s, endp); 01946 if (s < (*endp) && (*endp)[-1] == ' ') 01947 (*endp)--; 01948 return result; 01949 } /* strtod */ |
|
Definition at line 1951 of file global.c. Referenced by qh_initflags(), qh_initthresholds(), and qh_readpoints().
01951 { 01952 int result; 01953 01954 result= (int) strtol (s, endp, 10); 01955 if (s< (*endp) && (*endp)[-1] == ' ') 01956 (*endp)--; 01957 return result; 01958 } /* strtol */ |