1 /*<html><pre> -<a href="qh-geom_r.htm" 2 >-------------------------------</a><a name="TOP">-</a> 3 4 geom_r.h 5 header file for geometric routines 6 7 see qh-geom_r.htm and geom_r.c 8 9 Copyright (c) 1993-2015 The Geometry Center. 10 $Id: //main/2015/qhull/src/libqhull_r/geom_r.h#3 $$Change: 2079 $ 11 $DateTime: 2016/02/07 17:43:34 $$Author: bbarber $ 12 */ 13 14 #ifndef qhDEFgeom 15 #define qhDEFgeom 1 16 17 #include "libqhull_r.h" 18 19 /* ============ -macros- ======================== */ 20 21 /*-<a href="qh-geom_r.htm#TOC" 22 >--------------------------------</a><a name="fabs_">-</a> 23 24 fabs_(a) 25 returns the absolute value of a 26 */ 27 #define fabs_( a ) ((( a ) < 0 ) ? -( a ):( a )) 28 29 /*-<a href="qh-geom_r.htm#TOC" 30 >--------------------------------</a><a name="fmax_">-</a> 31 32 fmax_(a,b) 33 returns the maximum value of a and b 34 */ 35 #define fmax_( a,b ) ( ( a ) < ( b ) ? ( b ) : ( a ) ) 36 37 /*-<a href="qh-geom_r.htm#TOC" 38 >--------------------------------</a><a name="fmin_">-</a> 39 40 fmin_(a,b) 41 returns the minimum value of a and b 42 */ 43 #define fmin_( a,b ) ( ( a ) > ( b ) ? ( b ) : ( a ) ) 44 45 /*-<a href="qh-geom_r.htm#TOC" 46 >--------------------------------</a><a name="maximize_">-</a> 47 48 maximize_(maxval, val) 49 set maxval to val if val is greater than maxval 50 */ 51 #define maximize_( maxval, val ) { if (( maxval ) < ( val )) ( maxval )= ( val ); } 52 53 /*-<a href="qh-geom_r.htm#TOC" 54 >--------------------------------</a><a name="minimize_">-</a> 55 56 minimize_(minval, val) 57 set minval to val if val is less than minval 58 */ 59 #define minimize_( minval, val ) { if (( minval ) > ( val )) ( minval )= ( val ); } 60 61 /*-<a href="qh-geom_r.htm#TOC" 62 >--------------------------------</a><a name="det2_">-</a> 63 64 det2_(a1, a2, 65 b1, b2) 66 67 compute a 2-d determinate 68 */ 69 #define det2_( a1,a2,b1,b2 ) (( a1 )*( b2 ) - ( a2 )*( b1 )) 70 71 /*-<a href="qh-geom_r.htm#TOC" 72 >--------------------------------</a><a name="det3_">-</a> 73 74 det3_(a1, a2, a3, 75 b1, b2, b3, 76 c1, c2, c3) 77 78 compute a 3-d determinate 79 */ 80 #define det3_( a1,a2,a3,b1,b2,b3,c1,c2,c3 ) ( ( a1 )*det2_( b2,b3,c2,c3 ) \ 81 - ( b1 )*det2_( a2,a3,c2,c3 ) + ( c1 )*det2_( a2,a3,b2,b3 ) ) 82 83 /*-<a href="qh-geom_r.htm#TOC" 84 >--------------------------------</a><a name="dX">-</a> 85 86 dX( p1, p2 ) 87 dY( p1, p2 ) 88 dZ( p1, p2 ) 89 90 given two indices into rows[], 91 92 compute the difference between X, Y, or Z coordinates 93 */ 94 #define dX( p1,p2 ) ( *( rows[p1] ) - *( rows[p2] )) 95 #define dY( p1,p2 ) ( *( rows[p1]+1 ) - *( rows[p2]+1 )) 96 #define dZ( p1,p2 ) ( *( rows[p1]+2 ) - *( rows[p2]+2 )) 97 #define dW( p1,p2 ) ( *( rows[p1]+3 ) - *( rows[p2]+3 )) 98 99 /*============= prototypes in alphabetical order, infrequent at end ======= */ 100 101 #ifdef __cplusplus 102 extern "C" { 103 #endif 104 105 void qh_backnormal(qhT *qh, realT **rows, int numrow, int numcol, boolT sign, coordT *normal, boolT *nearzero); 106 void qh_distplane(qhT *qh, pointT *point, facetT *facet, realT *dist); 107 facetT *qh_findbest(qhT *qh, pointT *point, facetT *startfacet, 108 boolT bestoutside, boolT isnewfacets, boolT noupper, 109 realT *dist, boolT *isoutside, int *numpart); 110 facetT *qh_findbesthorizon(qhT *qh, boolT ischeckmax, pointT *point, 111 facetT *startfacet, boolT noupper, realT *bestdist, int *numpart); 112 facetT *qh_findbestnew(qhT *qh, pointT *point, facetT *startfacet, realT *dist, 113 boolT bestoutside, boolT *isoutside, int *numpart); 114 void qh_gausselim(qhT *qh, realT **rows, int numrow, int numcol, boolT *sign, boolT *nearzero); 115 realT qh_getangle(qhT *qh, pointT *vect1, pointT *vect2); 116 pointT *qh_getcenter(qhT *qh, setT *vertices); 117 pointT *qh_getcentrum(qhT *qh, facetT *facet); 118 realT qh_getdistance(qhT *qh, facetT *facet, facetT *neighbor, realT *mindist, realT *maxdist); 119 void qh_normalize(qhT *qh, coordT *normal, int dim, boolT toporient); 120 void qh_normalize2(qhT *qh, coordT *normal, int dim, boolT toporient, 121 realT *minnorm, boolT *ismin); 122 pointT *qh_projectpoint(qhT *qh, pointT *point, facetT *facet, realT dist); 123 124 void qh_setfacetplane(qhT *qh, facetT *newfacets); 125 void qh_sethyperplane_det(qhT *qh, int dim, coordT **rows, coordT *point0, 126 boolT toporient, coordT *normal, realT *offset, boolT *nearzero); 127 void qh_sethyperplane_gauss(qhT *qh, int dim, coordT **rows, pointT *point0, 128 boolT toporient, coordT *normal, coordT *offset, boolT *nearzero); 129 boolT qh_sharpnewfacets(qhT *qh); 130 131 /*========= infrequently used code in geom2_r.c =============*/ 132 133 coordT *qh_copypoints(qhT *qh, coordT *points, int numpoints, int dimension); 134 void qh_crossproduct(int dim, realT vecA[3], realT vecB[3], realT vecC[3]); 135 realT qh_determinant(qhT *qh, realT **rows, int dim, boolT *nearzero); 136 realT qh_detjoggle(qhT *qh, pointT *points, int numpoints, int dimension); 137 void qh_detroundoff(qhT *qh); 138 realT qh_detsimplex(qhT *qh, pointT *apex, setT *points, int dim, boolT *nearzero); 139 realT qh_distnorm(int dim, pointT *point, pointT *normal, realT *offsetp); 140 realT qh_distround(qhT *qh, int dimension, realT maxabs, realT maxsumabs); 141 realT qh_divzero(realT numer, realT denom, realT mindenom1, boolT *zerodiv); 142 realT qh_facetarea(qhT *qh, facetT *facet); 143 realT qh_facetarea_simplex(qhT *qh, int dim, coordT *apex, setT *vertices, 144 vertexT *notvertex, boolT toporient, coordT *normal, realT *offset); 145 pointT *qh_facetcenter(qhT *qh, setT *vertices); 146 facetT *qh_findgooddist(qhT *qh, pointT *point, facetT *facetA, realT *distp, facetT **facetlist); 147 void qh_getarea(qhT *qh, facetT *facetlist); 148 boolT qh_gram_schmidt(qhT *qh, int dim, realT **rows); 149 boolT qh_inthresholds(qhT *qh, coordT *normal, realT *angle); 150 void qh_joggleinput(qhT *qh); 151 realT *qh_maxabsval(realT *normal, int dim); 152 setT *qh_maxmin(qhT *qh, pointT *points, int numpoints, int dimension); 153 realT qh_maxouter(qhT *qh); 154 void qh_maxsimplex(qhT *qh, int dim, setT *maxpoints, pointT *points, int numpoints, setT **simplex); 155 realT qh_minabsval(realT *normal, int dim); 156 int qh_mindiff(realT *vecA, realT *vecB, int dim); 157 boolT qh_orientoutside(qhT *qh, facetT *facet); 158 void qh_outerinner(qhT *qh, facetT *facet, realT *outerplane, realT *innerplane); 159 coordT qh_pointdist(pointT *point1, pointT *point2, int dim); 160 void qh_printmatrix(qhT *qh, FILE *fp, const char *string, realT **rows, int numrow, int numcol); 161 void qh_printpoints(qhT *qh, FILE *fp, const char *string, setT *points); 162 void qh_projectinput(qhT *qh); 163 void qh_projectpoints(qhT *qh, signed char *project, int n, realT *points, 164 int numpoints, int dim, realT *newpoints, int newdim); 165 void qh_rotateinput(qhT *qh, realT **rows); 166 void qh_rotatepoints(qhT *qh, realT *points, int numpoints, int dim, realT **rows); 167 void qh_scaleinput(qhT *qh); 168 void qh_scalelast(qhT *qh, coordT *points, int numpoints, int dim, coordT low, 169 coordT high, coordT newhigh); 170 void qh_scalepoints(qhT *qh, pointT *points, int numpoints, int dim, 171 realT *newlows, realT *newhighs); 172 boolT qh_sethalfspace(qhT *qh, int dim, coordT *coords, coordT **nextp, 173 coordT *normal, coordT *offset, coordT *feasible); 174 coordT *qh_sethalfspace_all(qhT *qh, int dim, int count, coordT *halfspaces, pointT *feasible); 175 pointT *qh_voronoi_center(qhT *qh, int dim, setT *points); 176 177 #ifdef __cplusplus 178 } /* extern "C"*/ 179 #endif 180 181 #endif /* qhDEFgeom */ 182 183 184 185