clipper2-ts 2.0.1-13 → 2.0.1-15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,948 @@
1
+ // Adaptive precision geometric predicates ported from
2
+ // Jonathan Richard Shewchuk's predicates.c (public domain).
3
+ // https://www.cs.cmu.edu/~quake/robust.html
4
+ const EPSILON = 1.1102230246251565e-16; // 2^-53
5
+ const SPLITTER = 134217729; // 2^27 + 1
6
+ const resulterrbound = (3 + 8 * EPSILON) * EPSILON;
7
+ const ccwerrboundA = (3 + 16 * EPSILON) * EPSILON;
8
+ const ccwerrboundB = (2 + 12 * EPSILON) * EPSILON;
9
+ const ccwerrboundC = (9 + 64 * EPSILON) * EPSILON * EPSILON;
10
+ const iccerrboundA = (10 + 96 * EPSILON) * EPSILON;
11
+ const iccerrboundB = (4 + 48 * EPSILON) * EPSILON;
12
+ const iccerrboundC = (44 + 576 * EPSILON) * EPSILON * EPSILON;
13
+ // Pre-allocated working arrays for orient2d
14
+ const o2dB = new Float64Array(4);
15
+ const o2dC1 = new Float64Array(8);
16
+ const o2dC2 = new Float64Array(12);
17
+ const o2dD = new Float64Array(16);
18
+ const o2du = new Float64Array(4);
19
+ // Pre-allocated working arrays for incircle
20
+ const icbc = new Float64Array(4);
21
+ const icca = new Float64Array(4);
22
+ const icab = new Float64Array(4);
23
+ const icaa = new Float64Array(4);
24
+ const icbb = new Float64Array(4);
25
+ const iccc = new Float64Array(4);
26
+ const icu = new Float64Array(4);
27
+ const icaxtbc = new Float64Array(8);
28
+ const icaytbc = new Float64Array(8);
29
+ const icbxtca = new Float64Array(8);
30
+ const icbytca = new Float64Array(8);
31
+ const iccxtab = new Float64Array(8);
32
+ const iccytab = new Float64Array(8);
33
+ const icabt = new Float64Array(8);
34
+ const icbct = new Float64Array(8);
35
+ const iccat = new Float64Array(8);
36
+ const icabtt = new Float64Array(4);
37
+ const icbctt = new Float64Array(4);
38
+ const iccatt = new Float64Array(4);
39
+ const ic8 = new Float64Array(8);
40
+ const ic16 = new Float64Array(16);
41
+ const ic16b = new Float64Array(16);
42
+ const ic16c = new Float64Array(16);
43
+ const ic32 = new Float64Array(32);
44
+ const ic32b = new Float64Array(32);
45
+ const ic48 = new Float64Array(48);
46
+ const ic64 = new Float64Array(64);
47
+ let icfin = new Float64Array(1152);
48
+ let icfin2 = new Float64Array(1152);
49
+ // fast_expansion_sum_zeroelim from predicates.c
50
+ function expansionSum(elen, e, flen, f, h) {
51
+ let Q, Qnew, hh, bvirt;
52
+ let enow = e[0];
53
+ let fnow = f[0];
54
+ let eindex = 0;
55
+ let findex = 0;
56
+ if ((fnow > enow) === (fnow > -enow)) {
57
+ Q = enow;
58
+ enow = e[++eindex];
59
+ }
60
+ else {
61
+ Q = fnow;
62
+ fnow = f[++findex];
63
+ }
64
+ let hindex = 0;
65
+ if (eindex < elen && findex < flen) {
66
+ if ((fnow > enow) === (fnow > -enow)) {
67
+ Qnew = enow + Q;
68
+ hh = Q - (Qnew - enow);
69
+ enow = e[++eindex];
70
+ }
71
+ else {
72
+ Qnew = fnow + Q;
73
+ hh = Q - (Qnew - fnow);
74
+ fnow = f[++findex];
75
+ }
76
+ Q = Qnew;
77
+ if (hh !== 0)
78
+ h[hindex++] = hh;
79
+ while (eindex < elen && findex < flen) {
80
+ if ((fnow > enow) === (fnow > -enow)) {
81
+ Qnew = Q + enow;
82
+ bvirt = Qnew - Q;
83
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
84
+ enow = e[++eindex];
85
+ }
86
+ else {
87
+ Qnew = Q + fnow;
88
+ bvirt = Qnew - Q;
89
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
90
+ fnow = f[++findex];
91
+ }
92
+ Q = Qnew;
93
+ if (hh !== 0)
94
+ h[hindex++] = hh;
95
+ }
96
+ }
97
+ while (eindex < elen) {
98
+ Qnew = Q + enow;
99
+ bvirt = Qnew - Q;
100
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
101
+ enow = e[++eindex];
102
+ Q = Qnew;
103
+ if (hh !== 0)
104
+ h[hindex++] = hh;
105
+ }
106
+ while (findex < flen) {
107
+ Qnew = Q + fnow;
108
+ bvirt = Qnew - Q;
109
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
110
+ fnow = f[++findex];
111
+ Q = Qnew;
112
+ if (hh !== 0)
113
+ h[hindex++] = hh;
114
+ }
115
+ if (Q !== 0 || hindex === 0)
116
+ h[hindex++] = Q;
117
+ return hindex;
118
+ }
119
+ // scale_expansion_zeroelim from predicates.c
120
+ function scaleExpansion(elen, e, b, h) {
121
+ let Q, sum, hh, product1, product0;
122
+ let bvirt, c, ahi, alo, bhi, blo;
123
+ c = SPLITTER * b;
124
+ bhi = c - (c - b);
125
+ blo = b - bhi;
126
+ let enow = e[0];
127
+ Q = enow * b;
128
+ c = SPLITTER * enow;
129
+ ahi = c - (c - enow);
130
+ alo = enow - ahi;
131
+ hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);
132
+ let hindex = 0;
133
+ if (hh !== 0)
134
+ h[hindex++] = hh;
135
+ for (let i = 1; i < elen; i++) {
136
+ enow = e[i];
137
+ product1 = enow * b;
138
+ c = SPLITTER * enow;
139
+ ahi = c - (c - enow);
140
+ alo = enow - ahi;
141
+ product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);
142
+ sum = Q + product0;
143
+ bvirt = sum - Q;
144
+ hh = Q - (sum - bvirt) + (product0 - bvirt);
145
+ if (hh !== 0)
146
+ h[hindex++] = hh;
147
+ Q = product1 + sum;
148
+ hh = sum - (Q - product1);
149
+ if (hh !== 0)
150
+ h[hindex++] = hh;
151
+ }
152
+ if (Q !== 0 || hindex === 0)
153
+ h[hindex++] = Q;
154
+ return hindex;
155
+ }
156
+ function estimate(elen, e) {
157
+ let Q = e[0];
158
+ for (let i = 1; i < elen; i++)
159
+ Q += e[i];
160
+ return Q;
161
+ }
162
+ function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
163
+ let bvirt, c, ahi, alo, bhi, blo;
164
+ let _i, _j, _0, s1, s0, t1, t0, u3;
165
+ let acxtail, acytail, bcxtail, bcytail;
166
+ const acx = ax - cx, bcx = bx - cx, acy = ay - cy, bcy = by - cy;
167
+ s1 = acx * bcy;
168
+ c = SPLITTER * acx;
169
+ ahi = c - (c - acx);
170
+ alo = acx - ahi;
171
+ c = SPLITTER * bcy;
172
+ bhi = c - (c - bcy);
173
+ blo = bcy - bhi;
174
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
175
+ t1 = acy * bcx;
176
+ c = SPLITTER * acy;
177
+ ahi = c - (c - acy);
178
+ alo = acy - ahi;
179
+ c = SPLITTER * bcx;
180
+ bhi = c - (c - bcx);
181
+ blo = bcx - bhi;
182
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
183
+ _i = s0 - t0;
184
+ bvirt = s0 - _i;
185
+ o2dB[0] = s0 - (_i + bvirt) + (bvirt - t0);
186
+ _j = s1 + _i;
187
+ bvirt = _j - s1;
188
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
189
+ _i = _0 - t1;
190
+ bvirt = _0 - _i;
191
+ o2dB[1] = _0 - (_i + bvirt) + (bvirt - t1);
192
+ u3 = _j + _i;
193
+ bvirt = u3 - _j;
194
+ o2dB[2] = _j - (u3 - bvirt) + (_i - bvirt);
195
+ o2dB[3] = u3;
196
+ let det = estimate(4, o2dB);
197
+ let errbound = ccwerrboundB * detsum;
198
+ if (det >= errbound || -det >= errbound)
199
+ return det;
200
+ bvirt = ax - acx;
201
+ acxtail = ax - (acx + bvirt) + (bvirt - cx);
202
+ bvirt = bx - bcx;
203
+ bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
204
+ bvirt = ay - acy;
205
+ acytail = ay - (acy + bvirt) + (bvirt - cy);
206
+ bvirt = by - bcy;
207
+ bcytail = by - (bcy + bvirt) + (bvirt - cy);
208
+ if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0)
209
+ return det;
210
+ errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
211
+ det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);
212
+ if (det >= errbound || -det >= errbound)
213
+ return det;
214
+ s1 = acxtail * bcy;
215
+ c = SPLITTER * acxtail;
216
+ ahi = c - (c - acxtail);
217
+ alo = acxtail - ahi;
218
+ c = SPLITTER * bcy;
219
+ bhi = c - (c - bcy);
220
+ blo = bcy - bhi;
221
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
222
+ t1 = acytail * bcx;
223
+ c = SPLITTER * acytail;
224
+ ahi = c - (c - acytail);
225
+ alo = acytail - ahi;
226
+ c = SPLITTER * bcx;
227
+ bhi = c - (c - bcx);
228
+ blo = bcx - bhi;
229
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
230
+ _i = s0 - t0;
231
+ bvirt = s0 - _i;
232
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
233
+ _j = s1 + _i;
234
+ bvirt = _j - s1;
235
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
236
+ _i = _0 - t1;
237
+ bvirt = _0 - _i;
238
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
239
+ u3 = _j + _i;
240
+ bvirt = u3 - _j;
241
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
242
+ o2du[3] = u3;
243
+ const C1len = expansionSum(4, o2dB, 4, o2du, o2dC1);
244
+ s1 = acx * bcytail;
245
+ c = SPLITTER * acx;
246
+ ahi = c - (c - acx);
247
+ alo = acx - ahi;
248
+ c = SPLITTER * bcytail;
249
+ bhi = c - (c - bcytail);
250
+ blo = bcytail - bhi;
251
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
252
+ t1 = acy * bcxtail;
253
+ c = SPLITTER * acy;
254
+ ahi = c - (c - acy);
255
+ alo = acy - ahi;
256
+ c = SPLITTER * bcxtail;
257
+ bhi = c - (c - bcxtail);
258
+ blo = bcxtail - bhi;
259
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
260
+ _i = s0 - t0;
261
+ bvirt = s0 - _i;
262
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
263
+ _j = s1 + _i;
264
+ bvirt = _j - s1;
265
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
266
+ _i = _0 - t1;
267
+ bvirt = _0 - _i;
268
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
269
+ u3 = _j + _i;
270
+ bvirt = u3 - _j;
271
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
272
+ o2du[3] = u3;
273
+ const C2len = expansionSum(C1len, o2dC1, 4, o2du, o2dC2);
274
+ s1 = acxtail * bcytail;
275
+ c = SPLITTER * acxtail;
276
+ ahi = c - (c - acxtail);
277
+ alo = acxtail - ahi;
278
+ c = SPLITTER * bcytail;
279
+ bhi = c - (c - bcytail);
280
+ blo = bcytail - bhi;
281
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
282
+ t1 = acytail * bcxtail;
283
+ c = SPLITTER * acytail;
284
+ ahi = c - (c - acytail);
285
+ alo = acytail - ahi;
286
+ c = SPLITTER * bcxtail;
287
+ bhi = c - (c - bcxtail);
288
+ blo = bcxtail - bhi;
289
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
290
+ _i = s0 - t0;
291
+ bvirt = s0 - _i;
292
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
293
+ _j = s1 + _i;
294
+ bvirt = _j - s1;
295
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
296
+ _i = _0 - t1;
297
+ bvirt = _0 - _i;
298
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
299
+ u3 = _j + _i;
300
+ bvirt = u3 - _j;
301
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
302
+ o2du[3] = u3;
303
+ const Dlen = expansionSum(C2len, o2dC2, 4, o2du, o2dD);
304
+ return o2dD[Dlen - 1];
305
+ }
306
+ // Returns +1 (CCW), -1 (CW), or 0 (collinear)
307
+ export function orient2dSign(ax, ay, bx, by, cx, cy) {
308
+ const detleft = (ax - cx) * (by - cy);
309
+ const detright = (ay - cy) * (bx - cx);
310
+ const det = detleft - detright;
311
+ if (detleft > 0) {
312
+ if (detright <= 0)
313
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
314
+ }
315
+ else if (detleft < 0) {
316
+ if (detright >= 0)
317
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
318
+ }
319
+ else {
320
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
321
+ }
322
+ const detsum = detleft > 0 ? detleft + detright : -detleft - detright;
323
+ const errbound = ccwerrboundA * detsum;
324
+ if (det >= errbound || -det >= errbound)
325
+ return det > 0 ? 1 : -1;
326
+ const result = orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
327
+ return result > 0 ? 1 : result < 0 ? -1 : 0;
328
+ }
329
+ function icFinadd(finlen, alen, a) {
330
+ finlen = expansionSum(finlen, icfin, alen, a, icfin2);
331
+ const tmp = icfin;
332
+ icfin = icfin2;
333
+ icfin2 = tmp;
334
+ return finlen;
335
+ }
336
+ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
337
+ let bvirt, c, ahi, alo, bhi, blo;
338
+ let _i, _j, _0, s1, s0, t1, t0, u3;
339
+ let finlen;
340
+ let adxtail, bdxtail, cdxtail;
341
+ let adytail, bdytail, cdytail;
342
+ let axtbclen = 0, aytbclen = 0, bxtcalen = 0, bytcalen = 0, cxtablen = 0, cytablen = 0;
343
+ let n1, n0;
344
+ const adx = ax - dx, bdx = bx - dx, cdx = cx - dx;
345
+ const ady = ay - dy, bdy = by - dy, cdy = cy - dy;
346
+ s1 = bdx * cdy;
347
+ c = SPLITTER * bdx;
348
+ ahi = c - (c - bdx);
349
+ alo = bdx - ahi;
350
+ c = SPLITTER * cdy;
351
+ bhi = c - (c - cdy);
352
+ blo = cdy - bhi;
353
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
354
+ t1 = cdx * bdy;
355
+ c = SPLITTER * cdx;
356
+ ahi = c - (c - cdx);
357
+ alo = cdx - ahi;
358
+ c = SPLITTER * bdy;
359
+ bhi = c - (c - bdy);
360
+ blo = bdy - bhi;
361
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
362
+ _i = s0 - t0;
363
+ bvirt = s0 - _i;
364
+ icbc[0] = s0 - (_i + bvirt) + (bvirt - t0);
365
+ _j = s1 + _i;
366
+ bvirt = _j - s1;
367
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
368
+ _i = _0 - t1;
369
+ bvirt = _0 - _i;
370
+ icbc[1] = _0 - (_i + bvirt) + (bvirt - t1);
371
+ u3 = _j + _i;
372
+ bvirt = u3 - _j;
373
+ icbc[2] = _j - (u3 - bvirt) + (_i - bvirt);
374
+ icbc[3] = u3;
375
+ s1 = cdx * ady;
376
+ c = SPLITTER * cdx;
377
+ ahi = c - (c - cdx);
378
+ alo = cdx - ahi;
379
+ c = SPLITTER * ady;
380
+ bhi = c - (c - ady);
381
+ blo = ady - bhi;
382
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
383
+ t1 = adx * cdy;
384
+ c = SPLITTER * adx;
385
+ ahi = c - (c - adx);
386
+ alo = adx - ahi;
387
+ c = SPLITTER * cdy;
388
+ bhi = c - (c - cdy);
389
+ blo = cdy - bhi;
390
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
391
+ _i = s0 - t0;
392
+ bvirt = s0 - _i;
393
+ icca[0] = s0 - (_i + bvirt) + (bvirt - t0);
394
+ _j = s1 + _i;
395
+ bvirt = _j - s1;
396
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
397
+ _i = _0 - t1;
398
+ bvirt = _0 - _i;
399
+ icca[1] = _0 - (_i + bvirt) + (bvirt - t1);
400
+ u3 = _j + _i;
401
+ bvirt = u3 - _j;
402
+ icca[2] = _j - (u3 - bvirt) + (_i - bvirt);
403
+ icca[3] = u3;
404
+ s1 = adx * bdy;
405
+ c = SPLITTER * adx;
406
+ ahi = c - (c - adx);
407
+ alo = adx - ahi;
408
+ c = SPLITTER * bdy;
409
+ bhi = c - (c - bdy);
410
+ blo = bdy - bhi;
411
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
412
+ t1 = bdx * ady;
413
+ c = SPLITTER * bdx;
414
+ ahi = c - (c - bdx);
415
+ alo = bdx - ahi;
416
+ c = SPLITTER * ady;
417
+ bhi = c - (c - ady);
418
+ blo = ady - bhi;
419
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
420
+ _i = s0 - t0;
421
+ bvirt = s0 - _i;
422
+ icab[0] = s0 - (_i + bvirt) + (bvirt - t0);
423
+ _j = s1 + _i;
424
+ bvirt = _j - s1;
425
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
426
+ _i = _0 - t1;
427
+ bvirt = _0 - _i;
428
+ icab[1] = _0 - (_i + bvirt) + (bvirt - t1);
429
+ u3 = _j + _i;
430
+ bvirt = u3 - _j;
431
+ icab[2] = _j - (u3 - bvirt) + (_i - bvirt);
432
+ icab[3] = u3;
433
+ finlen = expansionSum(expansionSum(expansionSum(scaleExpansion(scaleExpansion(4, icbc, adx, ic8), ic8, adx, ic16), ic16, scaleExpansion(scaleExpansion(4, icbc, ady, ic8), ic8, ady, ic16b), ic16b, ic32), ic32, expansionSum(scaleExpansion(scaleExpansion(4, icca, bdx, ic8), ic8, bdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icca, bdy, ic8), ic8, bdy, ic16b), ic16b, ic32b), ic32b, ic64), ic64, expansionSum(scaleExpansion(scaleExpansion(4, icab, cdx, ic8), ic8, cdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icab, cdy, ic8), ic8, cdy, ic16b), ic16b, ic32), ic32, icfin);
434
+ let det = estimate(finlen, icfin);
435
+ let errbound = iccerrboundB * permanent;
436
+ if (det >= errbound || -det >= errbound)
437
+ return det;
438
+ bvirt = ax - adx;
439
+ adxtail = ax - (adx + bvirt) + (bvirt - dx);
440
+ bvirt = ay - ady;
441
+ adytail = ay - (ady + bvirt) + (bvirt - dy);
442
+ bvirt = bx - bdx;
443
+ bdxtail = bx - (bdx + bvirt) + (bvirt - dx);
444
+ bvirt = by - bdy;
445
+ bdytail = by - (bdy + bvirt) + (bvirt - dy);
446
+ bvirt = cx - cdx;
447
+ cdxtail = cx - (cdx + bvirt) + (bvirt - dx);
448
+ bvirt = cy - cdy;
449
+ cdytail = cy - (cdy + bvirt) + (bvirt - dy);
450
+ if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&
451
+ adytail === 0 && bdytail === 0 && cdytail === 0)
452
+ return det;
453
+ errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);
454
+ det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +
455
+ 2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +
456
+ ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +
457
+ 2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +
458
+ ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +
459
+ 2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));
460
+ if (det >= errbound || -det >= errbound)
461
+ return det;
462
+ if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
463
+ s1 = adx * adx;
464
+ c = SPLITTER * adx;
465
+ ahi = c - (c - adx);
466
+ alo = adx - ahi;
467
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
468
+ t1 = ady * ady;
469
+ c = SPLITTER * ady;
470
+ ahi = c - (c - ady);
471
+ alo = ady - ahi;
472
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
473
+ _i = s0 + t0;
474
+ bvirt = _i - s0;
475
+ icaa[0] = s0 - (_i - bvirt) + (t0 - bvirt);
476
+ _j = s1 + _i;
477
+ bvirt = _j - s1;
478
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
479
+ _i = _0 + t1;
480
+ bvirt = _i - _0;
481
+ icaa[1] = _0 - (_i - bvirt) + (t1 - bvirt);
482
+ u3 = _j + _i;
483
+ bvirt = u3 - _j;
484
+ icaa[2] = _j - (u3 - bvirt) + (_i - bvirt);
485
+ icaa[3] = u3;
486
+ }
487
+ if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
488
+ s1 = bdx * bdx;
489
+ c = SPLITTER * bdx;
490
+ ahi = c - (c - bdx);
491
+ alo = bdx - ahi;
492
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
493
+ t1 = bdy * bdy;
494
+ c = SPLITTER * bdy;
495
+ ahi = c - (c - bdy);
496
+ alo = bdy - ahi;
497
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
498
+ _i = s0 + t0;
499
+ bvirt = _i - s0;
500
+ icbb[0] = s0 - (_i - bvirt) + (t0 - bvirt);
501
+ _j = s1 + _i;
502
+ bvirt = _j - s1;
503
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
504
+ _i = _0 + t1;
505
+ bvirt = _i - _0;
506
+ icbb[1] = _0 - (_i - bvirt) + (t1 - bvirt);
507
+ u3 = _j + _i;
508
+ bvirt = u3 - _j;
509
+ icbb[2] = _j - (u3 - bvirt) + (_i - bvirt);
510
+ icbb[3] = u3;
511
+ }
512
+ if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
513
+ s1 = cdx * cdx;
514
+ c = SPLITTER * cdx;
515
+ ahi = c - (c - cdx);
516
+ alo = cdx - ahi;
517
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
518
+ t1 = cdy * cdy;
519
+ c = SPLITTER * cdy;
520
+ ahi = c - (c - cdy);
521
+ alo = cdy - ahi;
522
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
523
+ _i = s0 + t0;
524
+ bvirt = _i - s0;
525
+ iccc[0] = s0 - (_i - bvirt) + (t0 - bvirt);
526
+ _j = s1 + _i;
527
+ bvirt = _j - s1;
528
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
529
+ _i = _0 + t1;
530
+ bvirt = _i - _0;
531
+ iccc[1] = _0 - (_i - bvirt) + (t1 - bvirt);
532
+ u3 = _j + _i;
533
+ bvirt = u3 - _j;
534
+ iccc[2] = _j - (u3 - bvirt) + (_i - bvirt);
535
+ iccc[3] = u3;
536
+ }
537
+ const sum3 = (al, a, bl, b, cl, cv) => {
538
+ const tl = expansionSum(al, a, bl, b, ic32);
539
+ return expansionSum(tl, ic32, cl, cv, ic48);
540
+ };
541
+ if (adxtail !== 0) {
542
+ axtbclen = scaleExpansion(4, icbc, adxtail, icaxtbc);
543
+ finlen = icFinadd(finlen, sum3(scaleExpansion(axtbclen, icaxtbc, 2 * adx, ic16), ic16, scaleExpansion(scaleExpansion(4, iccc, adxtail, ic8), ic8, bdy, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icbb, adxtail, ic8), ic8, -cdy, ic16c), ic16c), ic48);
544
+ }
545
+ if (adytail !== 0) {
546
+ aytbclen = scaleExpansion(4, icbc, adytail, icaytbc);
547
+ finlen = icFinadd(finlen, sum3(scaleExpansion(aytbclen, icaytbc, 2 * ady, ic16), ic16, scaleExpansion(scaleExpansion(4, icbb, adytail, ic8), ic8, cdx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, iccc, adytail, ic8), ic8, -bdx, ic16c), ic16c), ic48);
548
+ }
549
+ if (bdxtail !== 0) {
550
+ bxtcalen = scaleExpansion(4, icca, bdxtail, icbxtca);
551
+ finlen = icFinadd(finlen, sum3(scaleExpansion(bxtcalen, icbxtca, 2 * bdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icaa, bdxtail, ic8), ic8, cdy, ic16b), ic16b, scaleExpansion(scaleExpansion(4, iccc, bdxtail, ic8), ic8, -ady, ic16c), ic16c), ic48);
552
+ }
553
+ if (bdytail !== 0) {
554
+ bytcalen = scaleExpansion(4, icca, bdytail, icbytca);
555
+ finlen = icFinadd(finlen, sum3(scaleExpansion(bytcalen, icbytca, 2 * bdy, ic16), ic16, scaleExpansion(scaleExpansion(4, iccc, bdytail, ic8), ic8, adx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icaa, bdytail, ic8), ic8, -cdx, ic16c), ic16c), ic48);
556
+ }
557
+ if (cdxtail !== 0) {
558
+ cxtablen = scaleExpansion(4, icab, cdxtail, iccxtab);
559
+ finlen = icFinadd(finlen, sum3(scaleExpansion(cxtablen, iccxtab, 2 * cdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icbb, cdxtail, ic8), ic8, ady, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icaa, cdxtail, ic8), ic8, -bdy, ic16c), ic16c), ic48);
560
+ }
561
+ if (cdytail !== 0) {
562
+ cytablen = scaleExpansion(4, icab, cdytail, iccytab);
563
+ finlen = icFinadd(finlen, sum3(scaleExpansion(cytablen, iccytab, 2 * cdy, ic16), ic16, scaleExpansion(scaleExpansion(4, icaa, cdytail, ic8), ic8, bdx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icbb, cdytail, ic8), ic8, -adx, ic16c), ic16c), ic48);
564
+ }
565
+ const icv = new Float64Array(4);
566
+ let bctlen, catlen, abtlen;
567
+ let bcttlen, cattlen, abttlen;
568
+ if (adxtail !== 0 || adytail !== 0) {
569
+ if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
570
+ s1 = bdxtail * cdy;
571
+ c = SPLITTER * bdxtail;
572
+ ahi = c - (c - bdxtail);
573
+ alo = bdxtail - ahi;
574
+ c = SPLITTER * cdy;
575
+ bhi = c - (c - cdy);
576
+ blo = cdy - bhi;
577
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
578
+ t1 = bdx * cdytail;
579
+ c = SPLITTER * bdx;
580
+ ahi = c - (c - bdx);
581
+ alo = bdx - ahi;
582
+ c = SPLITTER * cdytail;
583
+ bhi = c - (c - cdytail);
584
+ blo = cdytail - bhi;
585
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
586
+ _i = s0 + t0;
587
+ bvirt = _i - s0;
588
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
589
+ _j = s1 + _i;
590
+ bvirt = _j - s1;
591
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
592
+ _i = _0 + t1;
593
+ bvirt = _i - _0;
594
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
595
+ u3 = _j + _i;
596
+ bvirt = u3 - _j;
597
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
598
+ icu[3] = u3;
599
+ n1 = -bdy;
600
+ n0 = -bdytail;
601
+ s1 = cdxtail * n1;
602
+ c = SPLITTER * cdxtail;
603
+ ahi = c - (c - cdxtail);
604
+ alo = cdxtail - ahi;
605
+ c = SPLITTER * n1;
606
+ bhi = c - (c - n1);
607
+ blo = n1 - bhi;
608
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
609
+ t1 = cdx * n0;
610
+ c = SPLITTER * cdx;
611
+ ahi = c - (c - cdx);
612
+ alo = cdx - ahi;
613
+ c = SPLITTER * n0;
614
+ bhi = c - (c - n0);
615
+ blo = n0 - bhi;
616
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
617
+ _i = s0 + t0;
618
+ bvirt = _i - s0;
619
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
620
+ _j = s1 + _i;
621
+ bvirt = _j - s1;
622
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
623
+ _i = _0 + t1;
624
+ bvirt = _i - _0;
625
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
626
+ u3 = _j + _i;
627
+ bvirt = u3 - _j;
628
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
629
+ icv[3] = u3;
630
+ bctlen = expansionSum(4, icu, 4, icv, icbct);
631
+ s1 = bdxtail * cdytail;
632
+ c = SPLITTER * bdxtail;
633
+ ahi = c - (c - bdxtail);
634
+ alo = bdxtail - ahi;
635
+ c = SPLITTER * cdytail;
636
+ bhi = c - (c - cdytail);
637
+ blo = cdytail - bhi;
638
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
639
+ t1 = cdxtail * bdytail;
640
+ c = SPLITTER * cdxtail;
641
+ ahi = c - (c - cdxtail);
642
+ alo = cdxtail - ahi;
643
+ c = SPLITTER * bdytail;
644
+ bhi = c - (c - bdytail);
645
+ blo = bdytail - bhi;
646
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
647
+ _i = s0 - t0;
648
+ bvirt = s0 - _i;
649
+ icbctt[0] = s0 - (_i + bvirt) + (bvirt - t0);
650
+ _j = s1 + _i;
651
+ bvirt = _j - s1;
652
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
653
+ _i = _0 - t1;
654
+ bvirt = _0 - _i;
655
+ icbctt[1] = _0 - (_i + bvirt) + (bvirt - t1);
656
+ u3 = _j + _i;
657
+ bvirt = u3 - _j;
658
+ icbctt[2] = _j - (u3 - bvirt) + (_i - bvirt);
659
+ icbctt[3] = u3;
660
+ bcttlen = 4;
661
+ }
662
+ else {
663
+ icbct[0] = 0;
664
+ bctlen = 1;
665
+ icbctt[0] = 0;
666
+ bcttlen = 1;
667
+ }
668
+ if (adxtail !== 0) {
669
+ const len = scaleExpansion(bctlen, icbct, adxtail, ic16c);
670
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(axtbclen, icaxtbc, adxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * adx, ic32), ic32, ic48), ic48);
671
+ const len2 = scaleExpansion(bcttlen, icbctt, adxtail, ic8);
672
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * adx, ic16), ic16, scaleExpansion(len2, ic8, adxtail, ic16b), ic16b, ic32b);
673
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, adxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
674
+ if (bdytail !== 0)
675
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, iccc, adxtail, ic8), ic8, bdytail, ic16), ic16);
676
+ if (cdytail !== 0)
677
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icbb, -adxtail, ic8), ic8, cdytail, ic16), ic16);
678
+ }
679
+ if (adytail !== 0) {
680
+ const len = scaleExpansion(bctlen, icbct, adytail, ic16c);
681
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(aytbclen, icaytbc, adytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * ady, ic32), ic32, ic48), ic48);
682
+ const len2 = scaleExpansion(bcttlen, icbctt, adytail, ic8);
683
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * ady, ic16), ic16, scaleExpansion(len2, ic8, adytail, ic16b), ic16b, ic32b);
684
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, adytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
685
+ }
686
+ }
687
+ if (bdxtail !== 0 || bdytail !== 0) {
688
+ if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
689
+ s1 = cdxtail * ady;
690
+ c = SPLITTER * cdxtail;
691
+ ahi = c - (c - cdxtail);
692
+ alo = cdxtail - ahi;
693
+ c = SPLITTER * ady;
694
+ bhi = c - (c - ady);
695
+ blo = ady - bhi;
696
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
697
+ t1 = cdx * adytail;
698
+ c = SPLITTER * cdx;
699
+ ahi = c - (c - cdx);
700
+ alo = cdx - ahi;
701
+ c = SPLITTER * adytail;
702
+ bhi = c - (c - adytail);
703
+ blo = adytail - bhi;
704
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
705
+ _i = s0 + t0;
706
+ bvirt = _i - s0;
707
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
708
+ _j = s1 + _i;
709
+ bvirt = _j - s1;
710
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
711
+ _i = _0 + t1;
712
+ bvirt = _i - _0;
713
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
714
+ u3 = _j + _i;
715
+ bvirt = u3 - _j;
716
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
717
+ icu[3] = u3;
718
+ n1 = -cdy;
719
+ n0 = -cdytail;
720
+ s1 = adxtail * n1;
721
+ c = SPLITTER * adxtail;
722
+ ahi = c - (c - adxtail);
723
+ alo = adxtail - ahi;
724
+ c = SPLITTER * n1;
725
+ bhi = c - (c - n1);
726
+ blo = n1 - bhi;
727
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
728
+ t1 = adx * n0;
729
+ c = SPLITTER * adx;
730
+ ahi = c - (c - adx);
731
+ alo = adx - ahi;
732
+ c = SPLITTER * n0;
733
+ bhi = c - (c - n0);
734
+ blo = n0 - bhi;
735
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
736
+ _i = s0 + t0;
737
+ bvirt = _i - s0;
738
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
739
+ _j = s1 + _i;
740
+ bvirt = _j - s1;
741
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
742
+ _i = _0 + t1;
743
+ bvirt = _i - _0;
744
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
745
+ u3 = _j + _i;
746
+ bvirt = u3 - _j;
747
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
748
+ icv[3] = u3;
749
+ catlen = expansionSum(4, icu, 4, icv, iccat);
750
+ s1 = cdxtail * adytail;
751
+ c = SPLITTER * cdxtail;
752
+ ahi = c - (c - cdxtail);
753
+ alo = cdxtail - ahi;
754
+ c = SPLITTER * adytail;
755
+ bhi = c - (c - adytail);
756
+ blo = adytail - bhi;
757
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
758
+ t1 = adxtail * cdytail;
759
+ c = SPLITTER * adxtail;
760
+ ahi = c - (c - adxtail);
761
+ alo = adxtail - ahi;
762
+ c = SPLITTER * cdytail;
763
+ bhi = c - (c - cdytail);
764
+ blo = cdytail - bhi;
765
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
766
+ _i = s0 - t0;
767
+ bvirt = s0 - _i;
768
+ iccatt[0] = s0 - (_i + bvirt) + (bvirt - t0);
769
+ _j = s1 + _i;
770
+ bvirt = _j - s1;
771
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
772
+ _i = _0 - t1;
773
+ bvirt = _0 - _i;
774
+ iccatt[1] = _0 - (_i + bvirt) + (bvirt - t1);
775
+ u3 = _j + _i;
776
+ bvirt = u3 - _j;
777
+ iccatt[2] = _j - (u3 - bvirt) + (_i - bvirt);
778
+ iccatt[3] = u3;
779
+ cattlen = 4;
780
+ }
781
+ else {
782
+ iccat[0] = 0;
783
+ catlen = 1;
784
+ iccatt[0] = 0;
785
+ cattlen = 1;
786
+ }
787
+ if (bdxtail !== 0) {
788
+ const len = scaleExpansion(catlen, iccat, bdxtail, ic16c);
789
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(bxtcalen, icbxtca, bdxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * bdx, ic32), ic32, ic48), ic48);
790
+ const len2 = scaleExpansion(cattlen, iccatt, bdxtail, ic8);
791
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * bdx, ic16), ic16, scaleExpansion(len2, ic8, bdxtail, ic16b), ic16b, ic32b);
792
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, bdxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
793
+ if (cdytail !== 0)
794
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icaa, bdxtail, ic8), ic8, cdytail, ic16), ic16);
795
+ if (adytail !== 0)
796
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, iccc, -bdxtail, ic8), ic8, adytail, ic16), ic16);
797
+ }
798
+ if (bdytail !== 0) {
799
+ const len = scaleExpansion(catlen, iccat, bdytail, ic16c);
800
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(bytcalen, icbytca, bdytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * bdy, ic32), ic32, ic48), ic48);
801
+ const len2 = scaleExpansion(cattlen, iccatt, bdytail, ic8);
802
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * bdy, ic16), ic16, scaleExpansion(len2, ic8, bdytail, ic16b), ic16b, ic32b);
803
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, bdytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
804
+ }
805
+ }
806
+ if (cdxtail !== 0 || cdytail !== 0) {
807
+ if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
808
+ s1 = adxtail * bdy;
809
+ c = SPLITTER * adxtail;
810
+ ahi = c - (c - adxtail);
811
+ alo = adxtail - ahi;
812
+ c = SPLITTER * bdy;
813
+ bhi = c - (c - bdy);
814
+ blo = bdy - bhi;
815
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
816
+ t1 = adx * bdytail;
817
+ c = SPLITTER * adx;
818
+ ahi = c - (c - adx);
819
+ alo = adx - ahi;
820
+ c = SPLITTER * bdytail;
821
+ bhi = c - (c - bdytail);
822
+ blo = bdytail - bhi;
823
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
824
+ _i = s0 + t0;
825
+ bvirt = _i - s0;
826
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
827
+ _j = s1 + _i;
828
+ bvirt = _j - s1;
829
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
830
+ _i = _0 + t1;
831
+ bvirt = _i - _0;
832
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
833
+ u3 = _j + _i;
834
+ bvirt = u3 - _j;
835
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
836
+ icu[3] = u3;
837
+ n1 = -ady;
838
+ n0 = -adytail;
839
+ s1 = bdxtail * n1;
840
+ c = SPLITTER * bdxtail;
841
+ ahi = c - (c - bdxtail);
842
+ alo = bdxtail - ahi;
843
+ c = SPLITTER * n1;
844
+ bhi = c - (c - n1);
845
+ blo = n1 - bhi;
846
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
847
+ t1 = bdx * n0;
848
+ c = SPLITTER * bdx;
849
+ ahi = c - (c - bdx);
850
+ alo = bdx - ahi;
851
+ c = SPLITTER * n0;
852
+ bhi = c - (c - n0);
853
+ blo = n0 - bhi;
854
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
855
+ _i = s0 + t0;
856
+ bvirt = _i - s0;
857
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
858
+ _j = s1 + _i;
859
+ bvirt = _j - s1;
860
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
861
+ _i = _0 + t1;
862
+ bvirt = _i - _0;
863
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
864
+ u3 = _j + _i;
865
+ bvirt = u3 - _j;
866
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
867
+ icv[3] = u3;
868
+ abtlen = expansionSum(4, icu, 4, icv, icabt);
869
+ s1 = adxtail * bdytail;
870
+ c = SPLITTER * adxtail;
871
+ ahi = c - (c - adxtail);
872
+ alo = adxtail - ahi;
873
+ c = SPLITTER * bdytail;
874
+ bhi = c - (c - bdytail);
875
+ blo = bdytail - bhi;
876
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
877
+ t1 = bdxtail * adytail;
878
+ c = SPLITTER * bdxtail;
879
+ ahi = c - (c - bdxtail);
880
+ alo = bdxtail - ahi;
881
+ c = SPLITTER * adytail;
882
+ bhi = c - (c - adytail);
883
+ blo = adytail - bhi;
884
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
885
+ _i = s0 - t0;
886
+ bvirt = s0 - _i;
887
+ icabtt[0] = s0 - (_i + bvirt) + (bvirt - t0);
888
+ _j = s1 + _i;
889
+ bvirt = _j - s1;
890
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
891
+ _i = _0 - t1;
892
+ bvirt = _0 - _i;
893
+ icabtt[1] = _0 - (_i + bvirt) + (bvirt - t1);
894
+ u3 = _j + _i;
895
+ bvirt = u3 - _j;
896
+ icabtt[2] = _j - (u3 - bvirt) + (_i - bvirt);
897
+ icabtt[3] = u3;
898
+ abttlen = 4;
899
+ }
900
+ else {
901
+ icabt[0] = 0;
902
+ abtlen = 1;
903
+ icabtt[0] = 0;
904
+ abttlen = 1;
905
+ }
906
+ if (cdxtail !== 0) {
907
+ const len = scaleExpansion(abtlen, icabt, cdxtail, ic16c);
908
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(cxtablen, iccxtab, cdxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * cdx, ic32), ic32, ic48), ic48);
909
+ const len2 = scaleExpansion(abttlen, icabtt, cdxtail, ic8);
910
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * cdx, ic16), ic16, scaleExpansion(len2, ic8, cdxtail, ic16b), ic16b, ic32b);
911
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, cdxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
912
+ if (adytail !== 0)
913
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icbb, cdxtail, ic8), ic8, adytail, ic16), ic16);
914
+ if (bdytail !== 0)
915
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icaa, -cdxtail, ic8), ic8, bdytail, ic16), ic16);
916
+ }
917
+ if (cdytail !== 0) {
918
+ const len = scaleExpansion(abtlen, icabt, cdytail, ic16c);
919
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(cytablen, iccytab, cdytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * cdy, ic32), ic32, ic48), ic48);
920
+ const len2 = scaleExpansion(abttlen, icabtt, cdytail, ic8);
921
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * cdy, ic16), ic16, scaleExpansion(len2, ic8, cdytail, ic16b), ic16b, ic32b);
922
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, cdytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
923
+ }
924
+ }
925
+ return icfin[finlen - 1];
926
+ }
927
+ // Returns +1 (inside), -1 (outside), or 0 (on circle)
928
+ // Points a,b,c must be in CCW order
929
+ export function incircleSign(ax, ay, bx, by, cx, cy, dx, dy) {
930
+ const adx = ax - dx, bdx = bx - dx, cdx = cx - dx;
931
+ const ady = ay - dy, bdy = by - dy, cdy = cy - dy;
932
+ const bdxcdy = bdx * cdy, cdxbdy = cdx * bdy;
933
+ const alift = adx * adx + ady * ady;
934
+ const cdxady = cdx * ady, adxcdy = adx * cdy;
935
+ const blift = bdx * bdx + bdy * bdy;
936
+ const adxbdy = adx * bdy, bdxady = bdx * ady;
937
+ const clift = cdx * cdx + cdy * cdy;
938
+ const det = alift * (bdxcdy - cdxbdy) + blift * (cdxady - adxcdy) + clift * (adxbdy - bdxady);
939
+ const permanent = (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +
940
+ (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +
941
+ (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;
942
+ const errbound = iccerrboundA * permanent;
943
+ if (det > errbound || -det > errbound)
944
+ return det > 0 ? 1 : -1;
945
+ const result = incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);
946
+ return result > 0 ? 1 : result < 0 ? -1 : 0;
947
+ }
948
+ //# sourceMappingURL=predicates.js.map