40 int orient2d(
const mpq2 &
a,
const mpq2 &b,
const mpq2 &
c)
42 mpq_class detleft = (
a[0] -
c[0]) * (b[1] -
c[1]);
43 mpq_class detright = (
a[1] -
c[1]) * (b[0] -
c[0]);
44 mpq_class det = detleft - detright;
53 int incircle(
const mpq2 &
a,
const mpq2 &b,
const mpq2 &
c,
const mpq2 &d)
55 mpq_class adx =
a[0] - d[0];
56 mpq_class bdx = b[0] - d[0];
57 mpq_class cdx =
c[0] - d[0];
58 mpq_class ady =
a[1] - d[1];
59 mpq_class bdy = b[1] - d[1];
60 mpq_class cdy =
c[1] - d[1];
62 mpq_class bdxcdy = bdx * cdy;
63 mpq_class cdxbdy = cdx * bdy;
64 mpq_class alift = adx * adx + ady * ady;
66 mpq_class cdxady = cdx * ady;
67 mpq_class adxcdy = adx * cdy;
68 mpq_class blift = bdx * bdx + bdy * bdy;
70 mpq_class adxbdy = adx * bdy;
71 mpq_class bdxady = bdx * ady;
72 mpq_class clift = cdx * cdx + cdy * cdy;
74 mpq_class det = alift * (bdxcdy - cdxbdy) + blift * (cdxady - adxcdy) +
75 clift * (adxbdy - bdxady);
85 int orient3d(
const mpq3 &
a,
const mpq3 &b,
const mpq3 &
c,
const mpq3 &d)
87 mpq_class adx =
a[0] - d[0];
88 mpq_class bdx = b[0] - d[0];
89 mpq_class cdx =
c[0] - d[0];
90 mpq_class ady =
a[1] - d[1];
91 mpq_class bdy = b[1] - d[1];
92 mpq_class cdy =
c[1] - d[1];
93 mpq_class adz =
a[2] - d[2];
94 mpq_class bdz = b[2] - d[2];
95 mpq_class cdz =
c[2] - d[2];
97 mpq_class bdxcdy = bdx * cdy;
98 mpq_class cdxbdy = cdx * bdy;
100 mpq_class cdxady = cdx * ady;
101 mpq_class adxcdy = adx * cdy;
103 mpq_class adxbdy = adx * bdy;
104 mpq_class bdxady = bdx * ady;
106 mpq_class det = adz * (bdxcdy - cdxbdy) + bdz * (cdxady - adxcdy) + cdz * (adxbdy - bdxady);
117 namespace robust_pred {
130 double orient2dfast(
const double *pa,
const double *pb,
const double *pc);
131 double orient2d(
const double *pa,
const double *pb,
const double *pc);
132 double orient3dfast(
const double *pa,
const double *pb,
const double *pc,
const double *pd);
133 double orient3d(
const double *pa,
const double *pb,
const double *pc,
const double *pd);
134 double incirclefast(
const double *pa,
const double *pb,
const double *pc,
const double *pd);
135 double incircle(
const double *pa,
const double *pb,
const double *pc,
const double *pd);
137 const double *pa,
const double *pb,
const double *pc,
const double *pd,
const double *pe);
139 const double *pa,
const double *pb,
const double *pc,
const double *pd,
const double *pe);
208 #define Absolute(a) ((a) >= 0.0 ? (a) : -(a))
225 #define Fast_Two_Sum_Tail(a, b, x, y) \
229 #define Fast_Two_Sum(a, b, x, y) \
230 x = (double)(a + b); \
231 Fast_Two_Sum_Tail(a, b, x, y)
233 #define Fast_Two_Diff_Tail(a, b, x, y) \
237 #define Fast_Two_Diff(a, b, x, y) \
238 x = (double)(a - b); \
239 Fast_Two_Diff_Tail(a, b, x, y)
241 #define Two_Sum_Tail(a, b, x, y) \
242 bvirt = (double)(x - a); \
244 bround = b - bvirt; \
245 around = a - avirt; \
248 #define Two_Sum(a, b, x, y) \
249 x = (double)(a + b); \
250 Two_Sum_Tail(a, b, x, y)
252 #define Two_Diff_Tail(a, b, x, y) \
253 bvirt = (double)(a - x); \
255 bround = bvirt - b; \
256 around = a - avirt; \
259 #define Two_Diff(a, b, x, y) \
260 x = (double)(a - b); \
261 Two_Diff_Tail(a, b, x, y)
263 #define Split(a, ahi, alo) \
264 c = (double)(splitter * a); \
265 abig = (double)(c - a); \
269 #define Two_Product_Tail(a, b, x, y) \
270 Split(a, ahi, alo); \
271 Split(b, bhi, blo); \
272 err1 = x - (ahi * bhi); \
273 err2 = err1 - (alo * bhi); \
274 err3 = err2 - (ahi * blo); \
275 y = (alo * blo) - err3
277 #define Two_Product(a, b, x, y) \
278 x = (double)(a * b); \
279 Two_Product_Tail(a, b, x, y)
281 #define Two_Product_Presplit(a, b, bhi, blo, x, y) \
282 x = (double)(a * b); \
283 Split(a, ahi, alo); \
284 err1 = x - (ahi * bhi); \
285 err2 = err1 - (alo * bhi); \
286 err3 = err2 - (ahi * blo); \
287 y = (alo * blo) - err3
289 #define Two_Product_2Presplit(a, ahi, alo, b, bhi, blo, x, y) \
290 x = (double)(a * b); \
291 err1 = x - (ahi * bhi); \
292 err2 = err1 - (alo * bhi); \
293 err3 = err2 - (ahi * blo); \
294 y = (alo * blo) - err3
296 #define Square_Tail(a, x, y) \
297 Split(a, ahi, alo); \
298 err1 = x - (ahi * ahi); \
299 err3 = err1 - ((ahi + ahi) * alo); \
300 y = (alo * alo) - err3
302 #define Square(a, x, y) \
303 x = (double)(a * a); \
306 #define Two_One_Sum(a1, a0, b, x2, x1, x0) \
307 Two_Sum(a0, b, _i, x0); \
308 Two_Sum(a1, _i, x2, x1)
310 #define Two_One_Diff(a1, a0, b, x2, x1, x0) \
311 Two_Diff(a0, b, _i, x0); \
312 Two_Sum(a1, _i, x2, x1)
314 #define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0) \
315 Two_One_Sum(a1, a0, b0, _j, _0, x0); \
316 Two_One_Sum(_j, _0, b1, x3, x2, x1)
318 #define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0) \
319 Two_One_Diff(a1, a0, b0, _j, _0, x0); \
320 Two_One_Diff(_j, _0, b1, x3, x2, x1)
322 #define Four_One_Sum(a3, a2, a1, a0, b, x4, x3, x2, x1, x0) \
323 Two_One_Sum(a1, a0, b, _j, x1, x0); \
324 Two_One_Sum(a3, a2, _j, x4, x3, x2)
326 #define Four_Two_Sum(a3, a2, a1, a0, b1, b0, x5, x4, x3, x2, x1, x0) \
327 Four_One_Sum(a3, a2, a1, a0, b0, _k, _2, _1, _0, x0); \
328 Four_One_Sum(_k, _2, _1, _0, b1, x5, x4, x3, x2, x1)
330 #define Four_Four_Sum(a3, a2, a1, a0, b4, b3, b1, b0, x7, x6, x5, x4, x3, x2, x1, x0) \
331 Four_Two_Sum(a3, a2, a1, a0, b1, b0, _l, _2, _1, _0, x1, x0); \
332 Four_Two_Sum(_l, _2, _1, _0, b4, b3, x7, x6, x5, x4, x3, x2)
334 #define Eight_One_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b, x8, x7, x6, x5, x4, x3, x2, x1, x0) \
335 Four_One_Sum(a3, a2, a1, a0, b, _j, x3, x2, x1, x0); \
336 Four_One_Sum(a7, a6, a5, a4, _j, x8, x7, x6, x5, x4)
338 #define Eight_Two_Sum( \
339 a7, a6, a5, a4, a3, a2, a1, a0, b1, b0, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) \
340 Eight_One_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b0, _k, _6, _5, _4, _3, _2, _1, _0, x0); \
341 Eight_One_Sum(_k, _6, _5, _4, _3, _2, _1, _0, b1, x9, x8, x7, x6, x5, x4, x3, x2, x1)
343 #define Eight_Four_Sum(a7, \
367 Eight_Two_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b1, b0, _l, _6, _5, _4, _3, _2, _1, _0, x1, x0); \
368 Eight_Two_Sum(_l, _6, _5, _4, _3, _2, _1, _0, b4, b3, x11, x10, x9, x8, x7, x6, x5, x4, x3, x2)
370 #define Two_One_Product(a1, a0, b, x3, x2, x1, x0) \
371 Split(b, bhi, blo); \
372 Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \
373 Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \
374 Two_Sum(_i, _0, _k, x1); \
375 Fast_Two_Sum(_j, _k, x3, x2)
377 #define Four_One_Product(a3, a2, a1, a0, b, x7, x6, x5, x4, x3, x2, x1, x0) \
378 Split(b, bhi, blo); \
379 Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \
380 Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \
381 Two_Sum(_i, _0, _k, x1); \
382 Fast_Two_Sum(_j, _k, _i, x2); \
383 Two_Product_Presplit(a2, b, bhi, blo, _j, _0); \
384 Two_Sum(_i, _0, _k, x3); \
385 Fast_Two_Sum(_j, _k, _i, x4); \
386 Two_Product_Presplit(a3, b, bhi, blo, _j, _0); \
387 Two_Sum(_i, _0, _k, x5); \
388 Fast_Two_Sum(_j, _k, x7, x6)
390 #define Two_Two_Product(a1, a0, b1, b0, x7, x6, x5, x4, x3, x2, x1, x0) \
391 Split(a0, a0hi, a0lo); \
392 Split(b0, bhi, blo); \
393 Two_Product_2Presplit(a0, a0hi, a0lo, b0, bhi, blo, _i, x0); \
394 Split(a1, a1hi, a1lo); \
395 Two_Product_2Presplit(a1, a1hi, a1lo, b0, bhi, blo, _j, _0); \
396 Two_Sum(_i, _0, _k, _1); \
397 Fast_Two_Sum(_j, _k, _l, _2); \
398 Split(b1, bhi, blo); \
399 Two_Product_2Presplit(a0, a0hi, a0lo, b1, bhi, blo, _i, _0); \
400 Two_Sum(_1, _0, _k, x1); \
401 Two_Sum(_2, _k, _j, _1); \
402 Two_Sum(_l, _j, _m, _2); \
403 Two_Product_2Presplit(a1, a1hi, a1lo, b1, bhi, blo, _j, _0); \
404 Two_Sum(_i, _0, _n, _0); \
405 Two_Sum(_1, _0, _i, x2); \
406 Two_Sum(_2, _i, _k, _1); \
407 Two_Sum(_m, _k, _l, _2); \
408 Two_Sum(_j, _n, _k, _0); \
409 Two_Sum(_1, _0, _j, x3); \
410 Two_Sum(_2, _j, _i, _1); \
411 Two_Sum(_l, _i, _m, _2); \
412 Two_Sum(_1, _k, _i, x4); \
413 Two_Sum(_2, _i, _k, x5); \
414 Two_Sum(_m, _k, x7, x6)
416 #define Two_Square(a1, a0, x5, x4, x3, x2, x1, x0) \
417 Square(a0, _j, x0); \
419 Two_Product(a1, _0, _k, _1); \
420 Two_One_Sum(_k, _1, _j, _l, _2, x1); \
421 Square(a1, _j, _1); \
422 Two_Two_Sum(_j, _1, _l, _2, x5, x4, x3, x2)
453 double check, lastcheck;
471 every_other = !every_other;
473 }
while (!
ELEM(check, 1.0, lastcheck));
500 int elen,
const double *
e,
int flen,
const double *f,
double *h)
506 double avirt, bround, around;
507 int eindex, findex, hindex;
513 if ((fnow > enow) == (fnow > -enow)) {
522 if ((eindex < elen) && (findex < flen)) {
523 if ((fnow > enow) == (fnow > -enow)) {
535 while ((eindex < elen) && (findex < flen)) {
536 if ((fnow > enow) == (fnow > -enow)) {
550 while (eindex < elen) {
558 while (findex < flen) {
566 if ((Q != 0.0) || (hindex == 0)) {
588 double avirt, bround, around;
591 double ahi, alo, bhi, blo;
592 double err1, err2, err3;
600 for (eindex = 1; eindex < elen; eindex++) {
612 if ((Q != 0.0) || (hindex == 0)) {
625 for (eindex = 1; eindex < elen; eindex++) {
649 double orient2dfast(
const double *pa,
const double *pb,
const double *pc)
651 double acx, bcx, acy, bcy;
657 return acx * bcy - acy * bcx;
660 static double orient2dadapt(
const double *pa,
const double *pb,
const double *pc,
double detsum)
662 INEXACT double acx, acy, bcx, bcy;
663 double acxtail, acytail, bcxtail, bcytail;
664 INEXACT double detleft, detright;
665 double detlefttail, detrighttail;
666 double det, errbound;
667 double B[4], C1[8], C2[12],
D[16];
669 int C1length, C2length, Dlength;
676 double avirt, bround, around;
679 double ahi, alo, bhi, blo;
680 double err1, err2, err3;
684 acx = (
double)(pa[0] - pc[0]);
685 bcx = (
double)(pb[0] - pc[0]);
686 acy = (
double)(pa[1] - pc[1]);
687 bcy = (
double)(pb[1] - pc[1]);
692 Two_Two_Diff(detleft, detlefttail, detright, detrighttail,
B3,
B[2],
B[1],
B[0]);
697 if ((det >= errbound) || (-det >= errbound)) {
706 if ((acxtail == 0.0) && (acytail == 0.0) && (bcxtail == 0.0) && (bcytail == 0.0)) {
711 det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);
712 if ((det >= errbound) || (-det >= errbound)) {
734 return (
D[Dlength - 1]);
737 double orient2d(
const double *pa,
const double *pb,
const double *pc)
739 double detleft, detright, det;
740 double detsum, errbound;
742 detleft = (pa[0] - pc[0]) * (pb[1] - pc[1]);
743 detright = (pa[1] - pc[1]) * (pb[0] - pc[0]);
744 det = detleft - detright;
747 if (detright <= 0.0) {
750 detsum = detleft + detright;
752 else if (detleft < 0.0) {
753 if (detright >= 0.0) {
756 detsum = -detleft - detright;
763 if ((det >= errbound) || (-det >= errbound)) {
792 double orient3dfast(
const double *pa,
const double *pb,
const double *pc,
const double *pd)
794 double adx, bdx, cdx;
795 double ady, bdy, cdy;
796 double adz, bdz, cdz;
808 return adx * (bdy * cdz - bdz * cdy) + bdx * (cdy * adz - cdz * ady) +
809 cdx * (ady * bdz - adz * bdy);
818 const double *pa,
const double *pb,
const double *pc,
const double *pd,
double permanent)
820 INEXACT double adx, bdx, cdx, ady, bdy, cdy, adz, bdz, cdz;
821 double det, errbound;
823 INEXACT double bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
824 double bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
825 double bc[4], ca[4], ab[4];
827 double adet[8], bdet[8], cdet[8];
828 int alen, blen, clen;
831 double *finnow, *finother, *finswap;
832 double fin1[192], fin2[192];
835 double adxtail, bdxtail, cdxtail;
836 double adytail, bdytail, cdytail;
837 double adztail, bdztail, cdztail;
838 INEXACT double at_blarge, at_clarge;
839 INEXACT double bt_clarge, bt_alarge;
840 INEXACT double ct_alarge, ct_blarge;
841 double at_b[4], at_c[4], bt_c[4], bt_a[4], ct_a[4], ct_b[4];
842 int at_blen, at_clen, bt_clen, bt_alen, ct_alen, ct_blen;
843 INEXACT double bdxt_cdy1, cdxt_bdy1, cdxt_ady1;
844 INEXACT double adxt_cdy1, adxt_bdy1, bdxt_ady1;
845 double bdxt_cdy0, cdxt_bdy0, cdxt_ady0;
846 double adxt_cdy0, adxt_bdy0, bdxt_ady0;
847 INEXACT double bdyt_cdx1, cdyt_bdx1, cdyt_adx1;
848 INEXACT double adyt_cdx1, adyt_bdx1, bdyt_adx1;
849 double bdyt_cdx0, cdyt_bdx0, cdyt_adx0;
850 double adyt_cdx0, adyt_bdx0, bdyt_adx0;
851 double bct[8], cat[8], abt[8];
852 int bctlen, catlen, abtlen;
853 INEXACT double bdxt_cdyt1, cdxt_bdyt1, cdxt_adyt1;
854 INEXACT double adxt_cdyt1, adxt_bdyt1, bdxt_adyt1;
855 double bdxt_cdyt0, cdxt_bdyt0, cdxt_adyt0;
856 double adxt_cdyt0, adxt_bdyt0, bdxt_adyt0;
857 double u[4],
v[12],
w[16];
859 int vlength, wlength;
863 double avirt, bround, around;
866 double ahi, alo, bhi, blo;
867 double err1, err2, err3;
871 adx = (
double)(pa[0] - pd[0]);
872 bdx = (
double)(pb[0] - pd[0]);
873 cdx = (
double)(pc[0] - pd[0]);
874 ady = (
double)(pa[1] - pd[1]);
875 bdy = (
double)(pb[1] - pd[1]);
876 cdy = (
double)(pc[1] - pd[1]);
877 adz = (
double)(pa[2] - pd[2]);
878 bdz = (
double)(pb[2] - pd[2]);
879 cdz = (
double)(pc[2] - pd[2]);
883 Two_Two_Diff(bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0]);
889 Two_Two_Diff(cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0]);
895 Two_Two_Diff(adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0]);
904 if ((det >= errbound) || (-det >= errbound)) {
918 if ((adxtail == 0.0) && (bdxtail == 0.0) && (cdxtail == 0.0) && (adytail == 0.0) &&
919 (bdytail == 0.0) && (cdytail == 0.0) && (adztail == 0.0) && (bdztail == 0.0) &&
925 det += (adz * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +
926 adztail * (bdx * cdy - bdy * cdx)) +
927 (bdz * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +
928 bdztail * (cdx * ady - cdy * adx)) +
929 (cdz * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +
930 cdztail * (adx * bdy - ady * bdx));
931 if ((det >= errbound) || (-det >= errbound)) {
938 if (adxtail == 0.0) {
939 if (adytail == 0.0) {
956 if (adytail == 0.0) {
969 adxt_bdy1, adxt_bdy0, adyt_bdx1, adyt_bdx0, at_blarge, at_b[2], at_b[1], at_b[0]);
975 adyt_cdx1, adyt_cdx0, adxt_cdy1, adxt_cdy0, at_clarge, at_c[2], at_c[1], at_c[0]);
980 if (bdxtail == 0.0) {
981 if (bdytail == 0.0) {
998 if (bdytail == 0.0) {
1000 bt_c[1] = bt_clarge;
1004 bt_a[1] = bt_alarge;
1011 bdxt_cdy1, bdxt_cdy0, bdyt_cdx1, bdyt_cdx0, bt_clarge, bt_c[2], bt_c[1], bt_c[0]);
1012 bt_c[3] = bt_clarge;
1017 bdyt_adx1, bdyt_adx0, bdxt_ady1, bdxt_ady0, bt_alarge, bt_a[2], bt_a[1], bt_a[0]);
1018 bt_a[3] = bt_alarge;
1022 if (cdxtail == 0.0) {
1023 if (cdytail == 0.0) {
1032 ct_a[1] = ct_alarge;
1035 ct_b[1] = ct_blarge;
1040 if (cdytail == 0.0) {
1042 ct_a[1] = ct_alarge;
1046 ct_b[1] = ct_blarge;
1053 cdxt_ady1, cdxt_ady0, cdyt_adx1, cdyt_adx0, ct_alarge, ct_a[2], ct_a[1], ct_a[0]);
1054 ct_a[3] = ct_alarge;
1059 cdyt_bdx1, cdyt_bdx0, cdxt_bdy1, cdxt_bdy0, ct_blarge, ct_b[2], ct_b[1], ct_b[0]);
1060 ct_b[3] = ct_blarge;
1086 if (adztail != 0.0) {
1093 if (bdztail != 0.0) {
1100 if (cdztail != 0.0) {
1108 if (adxtail != 0.0) {
1109 if (bdytail != 0.0) {
1110 Two_Product(adxtail, bdytail, adxt_bdyt1, adxt_bdyt0);
1117 if (cdztail != 0.0) {
1118 Two_One_Product(adxt_bdyt1, adxt_bdyt0, cdztail, u3, u[2], u[1], u[0]);
1126 if (cdytail != 0.0) {
1128 Two_Product(negate, cdytail, adxt_cdyt1, adxt_cdyt0);
1135 if (bdztail != 0.0) {
1136 Two_One_Product(adxt_cdyt1, adxt_cdyt0, bdztail, u3, u[2], u[1], u[0]);
1145 if (bdxtail != 0.0) {
1146 if (cdytail != 0.0) {
1147 Two_Product(bdxtail, cdytail, bdxt_cdyt1, bdxt_cdyt0);
1154 if (adztail != 0.0) {
1155 Two_One_Product(bdxt_cdyt1, bdxt_cdyt0, adztail, u3, u[2], u[1], u[0]);
1163 if (adytail != 0.0) {
1165 Two_Product(negate, adytail, bdxt_adyt1, bdxt_adyt0);
1172 if (cdztail != 0.0) {
1173 Two_One_Product(bdxt_adyt1, bdxt_adyt0, cdztail, u3, u[2], u[1], u[0]);
1182 if (cdxtail != 0.0) {
1183 if (adytail != 0.0) {
1184 Two_Product(cdxtail, adytail, cdxt_adyt1, cdxt_adyt0);
1191 if (bdztail != 0.0) {
1192 Two_One_Product(cdxt_adyt1, cdxt_adyt0, bdztail, u3, u[2], u[1], u[0]);
1200 if (bdytail != 0.0) {
1202 Two_Product(negate, bdytail, cdxt_bdyt1, cdxt_bdyt0);
1209 if (adztail != 0.0) {
1210 Two_One_Product(cdxt_bdyt1, cdxt_bdyt0, adztail, u3, u[2], u[1], u[0]);
1220 if (adztail != 0.0) {
1227 if (bdztail != 0.0) {
1234 if (cdztail != 0.0) {
1242 return finnow[finlength - 1];
1245 double orient3d(
const double *pa,
const double *pb,
const double *pc,
const double *pd)
1247 double adx, bdx, cdx, ady, bdy, cdy, adz, bdz, cdz;
1248 double bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
1250 double permanent, errbound;
1252 adx = pa[0] - pd[0];
1253 bdx = pb[0] - pd[0];
1254 cdx = pc[0] - pd[0];
1255 ady = pa[1] - pd[1];
1256 bdy = pb[1] - pd[1];
1257 cdy = pc[1] - pd[1];
1258 adz = pa[2] - pd[2];
1259 bdz = pb[2] - pd[2];
1260 cdz = pc[2] - pd[2];
1271 det = adz * (bdxcdy - cdxbdy) + bdz * (cdxady - adxcdy) + cdz * (adxbdy - bdxady);
1277 if ((det > errbound) || (-det > errbound)) {
1303 double incirclefast(
const double *pa,
const double *pb,
const double *pc,
const double *pd)
1305 double adx, ady, bdx, bdy, cdx, cdy;
1306 double abdet, bcdet, cadet;
1307 double alift, blift, clift;
1309 adx = pa[0] - pd[0];
1310 ady = pa[1] - pd[1];
1311 bdx = pb[0] - pd[0];
1312 bdy = pb[1] - pd[1];
1313 cdx = pc[0] - pd[0];
1314 cdy = pc[1] - pd[1];
1316 abdet = adx * bdy - bdx * ady;
1317 bcdet = bdx * cdy - cdx * bdy;
1318 cadet = cdx * ady - adx * cdy;
1319 alift = adx * adx + ady * ady;
1320 blift = bdx * bdx + bdy * bdy;
1321 clift = cdx * cdx + cdy * cdy;
1323 return alift * bcdet + blift * cadet + clift * abdet;
1332 const double *pa,
const double *pb,
const double *pc,
const double *pd,
double permanent)
1334 INEXACT double adx, bdx, cdx, ady, bdy, cdy;
1335 double det, errbound;
1337 INEXACT double bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
1338 double bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
1339 double bc[4], ca[4], ab[4];
1341 double axbc[8], axxbc[16], aybc[8], ayybc[16], adet[32];
1342 int axbclen, axxbclen, aybclen, ayybclen, alen;
1343 double bxca[8], bxxca[16], byca[8], byyca[16], bdet[32];
1344 int bxcalen, bxxcalen, bycalen, byycalen, blen;
1345 double cxab[8], cxxab[16], cyab[8], cyyab[16], cdet[32];
1346 int cxablen, cxxablen, cyablen, cyyablen, clen;
1349 double fin1[1152], fin2[1152];
1350 double *finnow, *finother, *finswap;
1353 double adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;
1354 INEXACT double adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1;
1355 double adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0;
1356 double aa[4], bb[4], cc[4];
1362 double temp8[8], temp16a[16], temp16b[16], temp16c[16];
1363 double temp32a[32], temp32b[32], temp48[48], temp64[64];
1364 int temp8len, temp16alen, temp16blen, temp16clen;
1365 int temp32alen, temp32blen, temp48len, temp64len;
1366 double axtbb[8], axtcc[8], aytbb[8], aytcc[8];
1367 int axtbblen, axtcclen, aytbblen, aytcclen;
1368 double bxtaa[8], bxtcc[8], bytaa[8], bytcc[8];
1369 int bxtaalen, bxtcclen, bytaalen, bytcclen;
1370 double cxtaa[8], cxtbb[8], cytaa[8], cytbb[8];
1371 int cxtaalen, cxtbblen, cytaalen, cytbblen;
1372 double axtbc[8], aytbc[8], bxtca[8], bytca[8], cxtab[8], cytab[8];
1373 int axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;
1374 double axtbct[16], aytbct[16], bxtcat[16], bytcat[16], cxtabt[16], cytabt[16];
1375 int axtbctlen, aytbctlen, bxtcatlen, bytcatlen, cxtabtlen, cytabtlen;
1376 double axtbctt[8], aytbctt[8], bxtcatt[8];
1377 double bytcatt[8], cxtabtt[8], cytabtt[8];
1378 int axtbcttlen, aytbcttlen, bxtcattlen, bytcattlen, cxtabttlen, cytabttlen;
1379 double abt[8], bct[8], cat[8];
1380 int abtlen, bctlen, catlen;
1381 double abtt[4], bctt[4], catt[4];
1382 int abttlen, bcttlen, cattlen;
1383 INEXACT double abtt3, bctt3, catt3;
1387 double avirt, bround, around;
1390 double ahi, alo, bhi, blo;
1391 double err1, err2, err3;
1395 adx = (
double)(pa[0] - pd[0]);
1396 bdx = (
double)(pb[0] - pd[0]);
1397 cdx = (
double)(pc[0] - pd[0]);
1398 ady = (
double)(pa[1] - pd[1]);
1399 bdy = (
double)(pb[1] - pd[1]);
1400 cdy = (
double)(pc[1] - pd[1]);
1404 Two_Two_Diff(bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0]);
1414 Two_Two_Diff(cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0]);
1424 Two_Two_Diff(adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0]);
1437 if ((det >= errbound) || (-det >= errbound)) {
1447 if ((adxtail == 0.0) && (bdxtail == 0.0) && (cdxtail == 0.0) && (adytail == 0.0) &&
1448 (bdytail == 0.0) && (cdytail == 0.0)) {
1453 det += ((adx * adx + ady * ady) *
1454 ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +
1455 2.0 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +
1456 ((bdx * bdx + bdy * bdy) *
1457 ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +
1458 2.0 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +
1459 ((cdx * cdx + cdy * cdy) *
1460 ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +
1461 2.0 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));
1462 if ((det >= errbound) || (-det >= errbound)) {
1469 if ((bdxtail != 0.0) || (bdytail != 0.0) || (cdxtail != 0.0) || (cdytail != 0.0)) {
1470 Square(adx, adxadx1, adxadx0);
1471 Square(ady, adyady1, adyady0);
1472 Two_Two_Sum(adxadx1, adxadx0, adyady1, adyady0, aa3, aa[2], aa[1], aa[0]);
1475 if ((cdxtail != 0.0) || (cdytail != 0.0) || (adxtail != 0.0) || (adytail != 0.0)) {
1476 Square(bdx, bdxbdx1, bdxbdx0);
1477 Square(bdy, bdybdy1, bdybdy0);
1478 Two_Two_Sum(bdxbdx1, bdxbdx0, bdybdy1, bdybdy0, bb3, bb[2], bb[1], bb[0]);
1481 if ((adxtail != 0.0) || (adytail != 0.0) || (bdxtail != 0.0) || (bdytail != 0.0)) {
1482 Square(cdx, cdxcdx1, cdxcdx0);
1483 Square(cdy, cdycdy1, cdycdy0);
1484 Two_Two_Sum(cdxcdx1, cdxcdx0, cdycdy1, cdycdy0, cc3, cc[2], cc[1], cc[0]);
1488 if (adxtail != 0.0) {
1505 if (adytail != 0.0) {
1522 if (bdxtail != 0.0) {
1539 if (bdytail != 0.0) {
1556 if (cdxtail != 0.0) {
1573 if (cdytail != 0.0) {
1591 if ((adxtail != 0.0) || (adytail != 0.0)) {
1592 if ((bdxtail != 0.0) || (bdytail != 0.0) || (cdxtail != 0.0) || (cdytail != 0.0)) {
1595 Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
1607 Two_Two_Diff(ti1, ti0, tj1, tj0, bctt3, bctt[2], bctt[1], bctt[0]);
1618 if (adxtail != 0.0) {
1627 if (bdytail != 0.0) {
1635 if (cdytail != 0.0) {
1655 if (adytail != 0.0) {
1677 if ((bdxtail != 0.0) || (bdytail != 0.0)) {
1678 if ((cdxtail != 0.0) || (cdytail != 0.0) || (adxtail != 0.0) || (adytail != 0.0)) {
1681 Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
1693 Two_Two_Diff(ti1, ti0, tj1, tj0, catt3, catt[2], catt[1], catt[0]);
1704 if (bdxtail != 0.0) {
1713 if (cdytail != 0.0) {
1721 if (adytail != 0.0) {
1741 if (bdytail != 0.0) {
1763 if ((cdxtail != 0.0) || (cdytail != 0.0)) {
1764 if ((adxtail != 0.0) || (adytail != 0.0) || (bdxtail != 0.0) || (bdytail != 0.0)) {
1767 Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
1779 Two_Two_Diff(ti1, ti0, tj1, tj0, abtt3, abtt[2], abtt[1], abtt[0]);
1790 if (cdxtail != 0.0) {
1799 if (adytail != 0.0) {
1807 if (bdytail != 0.0) {
1827 if (cdytail != 0.0) {
1850 return finnow[finlength - 1];
1853 double incircle(
const double *pa,
const double *pb,
const double *pc,
const double *pd)
1855 double adx, bdx, cdx, ady, bdy, cdy;
1856 double bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
1857 double alift, blift, clift;
1859 double permanent, errbound;
1861 adx = pa[0] - pd[0];
1862 bdx = pb[0] - pd[0];
1863 cdx = pc[0] - pd[0];
1864 ady = pa[1] - pd[1];
1865 bdy = pb[1] - pd[1];
1866 cdy = pc[1] - pd[1];
1870 alift = adx * adx + ady * ady;
1874 blift = bdx * bdx + bdy * bdy;
1878 clift = cdx * cdx + cdy * cdy;
1880 det = alift * (bdxcdy - cdxbdy) + blift * (cdxady - adxcdy) + clift * (adxbdy - bdxady);
1886 if ((det > errbound) || (-det > errbound)) {
1914 const double *pa,
const double *pb,
const double *pc,
const double *pd,
const double *pe)
1916 double aex, bex, cex, dex;
1917 double aey, bey, cey, dey;
1918 double aez, bez, cez, dez;
1919 double alift, blift, clift, dlift;
1920 double ab, bc, cd, da, ac, bd;
1921 double abc, bcd, cda, dab;
1923 aex = pa[0] - pe[0];
1924 bex = pb[0] - pe[0];
1925 cex = pc[0] - pe[0];
1926 dex = pd[0] - pe[0];
1927 aey = pa[1] - pe[1];
1928 bey = pb[1] - pe[1];
1929 cey = pc[1] - pe[1];
1930 dey = pd[1] - pe[1];
1931 aez = pa[2] - pe[2];
1932 bez = pb[2] - pe[2];
1933 cez = pc[2] - pe[2];
1934 dez = pd[2] - pe[2];
1936 ab = aex * bey - bex * aey;
1937 bc = bex * cey - cex * bey;
1938 cd = cex * dey - dex * cey;
1939 da = dex * aey - aex * dey;
1941 ac = aex * cey - cex * aey;
1942 bd = bex * dey - dex * bey;
1944 abc = aez * bc - bez * ac + cez * ab;
1945 bcd = bez * cd - cez * bd + dez * bc;
1946 cda = cez * da + dez * ac + aez * cd;
1947 dab = dez * ab + aez * bd + bez * da;
1949 alift = aex * aex + aey * aey + aez * aez;
1950 blift = bex * bex + bey * bey + bez * bez;
1951 clift = cex * cex + cey * cey + cez * cez;
1952 dlift = dex * dex + dey * dey + dez * dez;
1954 return (dlift * abc - clift * dab) + (blift * cda - alift * bcd);
1958 const double *pa,
const double *pb,
const double *pc,
const double *pd,
const double *pe)
1960 INEXACT double axby1, bxcy1, cxdy1, dxey1, exay1;
1961 INEXACT double bxay1, cxby1, dxcy1, exdy1, axey1;
1962 INEXACT double axcy1, bxdy1, cxey1, dxay1, exby1;
1963 INEXACT double cxay1, dxby1, excy1, axdy1, bxey1;
1964 double axby0, bxcy0, cxdy0, dxey0, exay0;
1965 double bxay0, cxby0, dxcy0, exdy0, axey0;
1966 double axcy0, bxdy0, cxey0, dxay0, exby0;
1967 double cxay0, dxby0, excy0, axdy0, bxey0;
1968 double ab[4], bc[4], cd[4], de[4], ea[4];
1969 double ac[4], bd[4], ce[4], da[4], eb[4];
1970 double temp8a[8], temp8b[8], temp16[16];
1971 int temp8alen, temp8blen, temp16len;
1972 double abc[24], bcd[24], cde[24], dea[24], eab[24];
1973 double abd[24], bce[24], cda[24], deb[24], eac[24];
1974 int abclen, bcdlen, cdelen, dealen, eablen;
1975 int abdlen, bcelen, cdalen, deblen, eaclen;
1976 double temp48a[48], temp48b[48];
1977 int temp48alen, temp48blen;
1978 double abcd[96], bcde[96], cdea[96], deab[96], eabc[96];
1979 int abcdlen, bcdelen, cdealen, deablen, eabclen;
1980 double temp192[192];
1981 double det384x[384], det384y[384], det384z[384];
1982 int xlen, ylen, zlen;
1985 double adet[1152], bdet[1152], cdet[1152], ddet[1152], edet[1152];
1986 int alen, blen, clen, dlen, elen;
1987 double abdet[2304], cddet[2304], cdedet[3456];
1994 double avirt, bround, around;
1997 double ahi, alo, bhi, blo;
1998 double err1, err2, err3;
2004 Two_Two_Diff(axby1, axby0, bxay1, bxay0, ab[3], ab[2], ab[1], ab[0]);
2008 Two_Two_Diff(bxcy1, bxcy0, cxby1, cxby0, bc[3], bc[2], bc[1], bc[0]);
2012 Two_Two_Diff(cxdy1, cxdy0, dxcy1, dxcy0, cd[3], cd[2], cd[1], cd[0]);
2016 Two_Two_Diff(dxey1, dxey0, exdy1, exdy0, de[3], de[2], de[1], de[0]);
2020 Two_Two_Diff(exay1, exay0, axey1, axey0, ea[3], ea[2], ea[1], ea[0]);
2024 Two_Two_Diff(axcy1, axcy0, cxay1, cxay0, ac[3], ac[2], ac[1], ac[0]);
2028 Two_Two_Diff(bxdy1, bxdy0, dxby1, dxby0, bd[3], bd[2], bd[1], bd[0]);
2032 Two_Two_Diff(cxey1, cxey0, excy1, excy0, ce[3], ce[2], ce[1], ce[0]);
2036 Two_Two_Diff(dxay1, dxay0, axdy1, axdy0, da[3], da[2], da[1], da[0]);
2040 Two_Two_Diff(exby1, exby0, bxey1, bxey0, eb[3], eb[2], eb[1], eb[0]);
2104 for (i = 0; i < temp48blen; i++) {
2105 temp48b[i] = -temp48b[i];
2119 for (i = 0; i < temp48blen; i++) {
2120 temp48b[i] = -temp48b[i];
2134 for (i = 0; i < temp48blen; i++) {
2135 temp48b[i] = -temp48b[i];
2149 for (i = 0; i < temp48blen; i++) {
2150 temp48b[i] = -temp48b[i];
2164 for (i = 0; i < temp48blen; i++) {
2165 temp48b[i] = -temp48b[i];
2182 return deter[deterlen - 1];
2192 INEXACT double aex, bex, cex, dex, aey, bey, cey, dey, aez, bez, cez, dez;
2193 double det, errbound;
2195 INEXACT double aexbey1, bexaey1, bexcey1, cexbey1;
2196 INEXACT double cexdey1, dexcey1, dexaey1, aexdey1;
2197 INEXACT double aexcey1, cexaey1, bexdey1, dexbey1;
2198 double aexbey0, bexaey0, bexcey0, cexbey0;
2199 double cexdey0, dexcey0, dexaey0, aexdey0;
2200 double aexcey0, cexaey0, bexdey0, dexbey0;
2201 double ab[4], bc[4], cd[4], da[4], ac[4], bd[4];
2202 INEXACT double ab3, bc3, cd3, da3, ac3, bd3;
2203 double abeps, bceps, cdeps, daeps, aceps, bdeps;
2204 double temp8a[8], temp8b[8], temp8c[8], temp16[16], temp24[24], temp48[48];
2205 int temp8alen, temp8blen, temp8clen, temp16len, temp24len, temp48len;
2206 double xdet[96], ydet[96], zdet[96], xydet[192];
2207 int xlen, ylen, zlen, xylen;
2208 double adet[288], bdet[288], cdet[288], ddet[288];
2209 int alen, blen, clen, dlen;
2210 double abdet[576], cddet[576];
2215 double aextail, bextail, cextail, dextail;
2216 double aeytail, beytail, ceytail, deytail;
2217 double aeztail, beztail, ceztail, deztail;
2220 double avirt, bround, around;
2223 double ahi, alo, bhi, blo;
2224 double err1, err2, err3;
2228 aex = (
double)(pa[0] - pe[0]);
2229 bex = (
double)(pb[0] - pe[0]);
2230 cex = (
double)(pc[0] - pe[0]);
2231 dex = (
double)(pd[0] - pe[0]);
2232 aey = (
double)(pa[1] - pe[1]);
2233 bey = (
double)(pb[1] - pe[1]);
2234 cey = (
double)(pc[1] - pe[1]);
2235 dey = (
double)(pd[1] - pe[1]);
2236 aez = (
double)(pa[2] - pe[2]);
2237 bez = (
double)(pb[2] - pe[2]);
2238 cez = (
double)(pc[2] - pe[2]);
2239 dez = (
double)(pd[2] - pe[2]);
2243 Two_Two_Diff(aexbey1, aexbey0, bexaey1, bexaey0, ab3, ab[2], ab[1], ab[0]);
2248 Two_Two_Diff(bexcey1, bexcey0, cexbey1, cexbey0, bc3, bc[2], bc[1], bc[0]);
2253 Two_Two_Diff(cexdey1, cexdey0, dexcey1, dexcey0, cd3, cd[2], cd[1], cd[0]);
2258 Two_Two_Diff(dexaey1, dexaey0, aexdey1, aexdey0, da3, da[2], da[1], da[0]);
2263 Two_Two_Diff(aexcey1, aexcey0, cexaey1, cexaey0, ac3, ac[2], ac[1], ac[0]);
2268 Two_Two_Diff(bexdey1, bexdey0, dexbey1, dexbey0, bd3, bd[2], bd[1], bd[0]);
2333 if ((det >= errbound) || (-det >= errbound)) {
2349 if ((aextail == 0.0) && (aeytail == 0.0) && (aeztail == 0.0) && (bextail == 0.0) &&
2350 (beytail == 0.0) && (beztail == 0.0) && (cextail == 0.0) && (ceytail == 0.0) &&
2351 (ceztail == 0.0) && (dextail == 0.0) && (deytail == 0.0) && (deztail == 0.0)) {
2356 abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);
2357 bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);
2358 cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);
2359 daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);
2360 aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);
2361 bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);
2363 (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +
2364 (ceztail * da3 + deztail * ac3 + aeztail * cd3)) +
2365 (dex * dex + dey * dey + dez * dez) * ((aez * bceps - bez * aceps + cez * abeps) +
2366 (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -
2367 ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +
2368 (beztail * cd3 - ceztail * bd3 + deztail * bc3)) +
2369 (cex * cex + cey * cey + cez * cez) * ((dez * abeps + aez * bdeps + bez * daeps) +
2370 (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +
2372 (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +
2373 (dex * dextail + dey * deytail + dez * deztail) *
2374 (aez * bc3 - bez * ac3 + cez * ab3)) -
2375 ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +
2376 (cex * cextail + cey * ceytail + cez * ceztail) *
2377 (dez * ab3 + aez * bd3 + bez * da3)));
2378 if ((det >= errbound) || (-det >= errbound)) {
2386 const double *pa,
const double *pb,
const double *pc,
const double *pd,
const double *pe)
2388 double aex, bex, cex, dex;
2389 double aey, bey, cey, dey;
2390 double aez, bez, cez, dez;
2391 double aexbey, bexaey, bexcey, cexbey, cexdey, dexcey, dexaey, aexdey;
2392 double aexcey, cexaey, bexdey, dexbey;
2393 double alift, blift, clift, dlift;
2394 double ab, bc, cd, da, ac, bd;
2395 double abc, bcd, cda, dab;
2396 double aezplus, bezplus, cezplus, dezplus;
2397 double aexbeyplus, bexaeyplus, bexceyplus, cexbeyplus;
2398 double cexdeyplus, dexceyplus, dexaeyplus, aexdeyplus;
2399 double aexceyplus, cexaeyplus, bexdeyplus, dexbeyplus;
2401 double permanent, errbound;
2403 aex = pa[0] - pe[0];
2404 bex = pb[0] - pe[0];
2405 cex = pc[0] - pe[0];
2406 dex = pd[0] - pe[0];
2407 aey = pa[1] - pe[1];
2408 bey = pb[1] - pe[1];
2409 cey = pc[1] - pe[1];
2410 dey = pd[1] - pe[1];
2411 aez = pa[2] - pe[2];
2412 bez = pb[2] - pe[2];
2413 cez = pc[2] - pe[2];
2414 dez = pd[2] - pe[2];
2418 ab = aexbey - bexaey;
2421 bc = bexcey - cexbey;
2424 cd = cexdey - dexcey;
2427 da = dexaey - aexdey;
2431 ac = aexcey - cexaey;
2434 bd = bexdey - dexbey;
2436 abc = aez * bc - bez * ac + cez * ab;
2437 bcd = bez * cd - cez * bd + dez * bc;
2438 cda = cez * da + dez * ac + aez * cd;
2439 dab = dez * ab + aez * bd + bez * da;
2441 alift = aex * aex + aey * aey + aez * aez;
2442 blift = bex * bex + bey * bey + bez * bez;
2443 clift = cex * cex + cey * cey + cez * cez;
2444 dlift = dex * dex + dey * dey + dez * dez;
2446 det = (dlift * abc - clift * dab) + (blift * cda - alift * bcd);
2464 permanent = ((cexdeyplus + dexceyplus) * bezplus + (dexbeyplus + bexdeyplus) * cezplus +
2465 (bexceyplus + cexbeyplus) * dezplus) *
2467 ((dexaeyplus + aexdeyplus) * cezplus + (aexceyplus + cexaeyplus) * dezplus +
2468 (cexdeyplus + dexceyplus) * aezplus) *
2470 ((aexbeyplus + bexaeyplus) * dezplus + (bexdeyplus + dexbeyplus) * aezplus +
2471 (dexaeyplus + aexdeyplus) * bezplus) *
2473 ((bexceyplus + cexbeyplus) * aezplus + (cexaeyplus + aexceyplus) * bezplus +
2474 (aexbeyplus + bexaeyplus) * cezplus) *
2477 if ((det > errbound) || (-det > errbound)) {
2488 return (
x > 0) ? 1 : ((
x < 0) ? -1 : 0);
Math vector functions needed specifically for mesh intersect and boolean.
typedef double(DMatrix)[4][4]
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static T sum(const btAlignedObjectArray< T > &items)
#define Two_Product(a, b, x, y)
#define Two_Product_Presplit(a, b, bhi, blo, x, y)
#define Two_Diff_Tail(a, b, x, y)
#define Two_Sum(a, b, x, y)
#define Two_One_Product(a1, a0, b, x3, x2, x1, x0)
#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0)
#define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0)
#define Fast_Two_Sum(a, b, x, y)
#define Split(a, ahi, alo)
static double B3(double u)
static int fast_expansion_sum_zeroelim(int elen, const double *e, int flen, const double *f, double *h)
static double iccerrboundA
double orient2dfast(const double *pa, const double *pb, const double *pc)
static double resulterrbound
static double ccwerrboundB
static double orient2dadapt(const double *pa, const double *pb, const double *pc, double detsum)
static double o3derrboundC
double incirclefast(const double *pa, const double *pb, const double *pc, const double *pd)
static double isperrboundB
static double o3derrboundB
double insphere(const double *pa, const double *pb, const double *pc, const double *pd, const double *pe)
static double isperrboundC
static double ccwerrboundC
static double iccerrboundB
static double estimate(int elen, const double *e)
double orient3dfast(const double *pa, const double *pb, const double *pc, const double *pd)
static double isperrboundA
static RobustInitCaller init_caller
static double incircleadapt(const double *pa, const double *pb, const double *pc, const double *pd, double permanent)
static double insphereadapt(const double *pa, const double *pb, const double *pc, const double *pd, const double *pe, double permanent)
static double o3derrboundA
static double orient3dadapt(const double *pa, const double *pb, const double *pc, const double *pd, double permanent)
double orient3d(const double *pa, const double *pb, const double *pc, const double *pd)
static double iccerrboundC
double incircle(const double *pa, const double *pb, const double *pc, const double *pd)
static int scale_expansion_zeroelim(int elen, const double *e, double b, double *h)
double inspherefast(const double *pa, const double *pb, const double *pc, const double *pd, const double *pe)
double orient2d(const double *pa, const double *pb, const double *pc)
static double ccwerrboundA
static double insphereexact(const double *pa, const double *pb, const double *pc, const double *pd, const double *pe)
int orient3d_fast(const double3 &a, const double3 &b, const double3 &c, const double3 &d)
int orient2d(const double2 &a, const double2 &b, const double2 &c)
int incircle(const double2 &a, const double2 &b, const double2 &c, const double2 &d)
int orient3d(const double3 &a, const double3 &b, const double3 &c, const double3 &d)
int incircle_fast(const double2 &a, const double2 &b, const double2 &c, const double2 &d)
int orient2d_fast(const double2 &a, const double2 &b, const double2 &c)
int insphere_fast(const double3 &a, const double3 &b, const double3 &c, const double3 &d, const double3 &e)
int insphere(const double3 &a, const double3 &b, const double3 &c, const double3 &d, const double3 &e)