robust-predicates 2.0.2 → 3.0.1

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.
package/esm/incircle.js CHANGED
@@ -1,7 +1,4 @@
1
- import {
2
- epsilon, splitter, resulterrbound, estimate, vec,
3
- fast_expansion_sum_zeroelim, scale_expansion_zeroelim
4
- } from './util.js';
1
+ import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';
5
2
 
6
3
  const iccerrboundA = (10 + 96 * epsilon) * epsilon;
7
4
  const iccerrboundB = (4 + 48 * epsilon) * epsilon;
@@ -10,67 +7,17 @@ const iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;
10
7
  const bc = vec(4);
11
8
  const ca = vec(4);
12
9
  const ab = vec(4);
13
- const axbc = vec(8);
14
- const axxbc = vec(16);
15
- const aybc = vec(8);
16
- const ayybc = vec(16);
17
- const adet = vec(32);
18
- const bxca = vec(8);
19
- const bxxca = vec(16);
20
- const byca = vec(8);
21
- const byyca = vec(16);
22
- const bdet = vec(32);
23
- const cxab = vec(8);
24
- const cxxab = vec(16);
25
- const cyab = vec(8);
26
- const cyyab = vec(16);
27
- const cdet = vec(32);
28
- const abdet = vec(64);
29
- const fin1 = vec(1152);
30
- const fin2 = vec(1152);
31
10
  const aa = vec(4);
32
11
  const bb = vec(4);
33
12
  const cc = vec(4);
34
13
  const u = vec(4);
35
14
  const v = vec(4);
36
- const temp8 = vec(8);
37
- const temp16a = vec(16);
38
- const temp16b = vec(16);
39
- const temp16c = vec(16);
40
- const temp32a = vec(32);
41
- const temp32b = vec(32);
42
- const temp48 = vec(48);
43
- const temp64 = vec(64);
44
- const axtbb = vec(8);
45
- const axtcc = vec(8);
46
- const aytbb = vec(8);
47
- const aytcc = vec(8);
48
- const bxtaa = vec(8);
49
- const bxtcc = vec(8);
50
- const bytaa = vec(8);
51
- const bytcc = vec(8);
52
- const cxtaa = vec(8);
53
- const cxtbb = vec(8);
54
- const cytaa = vec(8);
55
- const cytbb = vec(8);
56
15
  const axtbc = vec(8);
57
16
  const aytbc = vec(8);
58
17
  const bxtca = vec(8);
59
18
  const bytca = vec(8);
60
19
  const cxtab = vec(8);
61
20
  const cytab = vec(8);
62
- const axtbct = vec(16);
63
- const aytbct = vec(16);
64
- const bxtcat = vec(16);
65
- const bytcat = vec(16);
66
- const cxtabt = vec(16);
67
- const cytabt = vec(16);
68
- const axtbctt = vec(8);
69
- const aytbctt = vec(8);
70
- const bxtcatt = vec(8);
71
- const bytcatt = vec(8);
72
- const cxtabtt = vec(8);
73
- const cytabtt = vec(8);
74
21
  const abt = vec(8);
75
22
  const bct = vec(8);
76
23
  const cat = vec(8);
@@ -78,28 +25,33 @@ const abtt = vec(4);
78
25
  const bctt = vec(4);
79
26
  const catt = vec(4);
80
27
 
81
- function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
82
- let bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
83
- let bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
84
- let bc3, ca3, ab3;
85
- let finnow, finother, finswap, finlength;
28
+ const _8 = vec(8);
29
+ const _16 = vec(16);
30
+ const _16b = vec(16);
31
+ const _16c = vec(16);
32
+ const _32 = vec(32);
33
+ const _32b = vec(32);
34
+ const _48 = vec(48);
35
+ const _64 = vec(64);
36
+
37
+ let fin = vec(1152);
38
+ let fin2 = vec(1152);
39
+
40
+ function finadd(finlen, a, alen) {
41
+ finlen = sum(finlen, fin, a, alen, fin2);
42
+ const tmp = fin; fin = fin2; fin2 = tmp;
43
+ return finlen;
44
+ }
86
45
 
46
+ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
47
+ let finlen;
87
48
  let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;
88
- let adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1;
89
- let adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0;
90
- let aa3, bb3, cc3;
91
- let ti1, tj1;
92
- let ti0, tj0;
93
- let u3, v3;
94
- let temp8len, temp16alen, temp16blen, temp16clen;
95
- let temp32alen, temp32blen, temp48len, temp64len;
96
49
  let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;
97
50
  let abtlen, bctlen, catlen;
98
51
  let abttlen, bcttlen, cattlen;
99
- let abtt3, bctt3, catt3;
100
- let negate;
52
+ let n1, n0;
101
53
 
102
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
54
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
103
55
 
104
56
  const adx = ax - dx;
105
57
  const bdx = bx - dx;
@@ -108,115 +60,107 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
108
60
  const bdy = by - dy;
109
61
  const cdy = cy - dy;
110
62
 
111
- bdxcdy1 = bdx * cdy;
63
+ s1 = bdx * cdy;
112
64
  c = splitter * bdx;
113
65
  ahi = c - (c - bdx);
114
66
  alo = bdx - ahi;
115
67
  c = splitter * cdy;
116
68
  bhi = c - (c - cdy);
117
69
  blo = cdy - bhi;
118
- bdxcdy0 = alo * blo - (bdxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
119
- cdxbdy1 = cdx * bdy;
70
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
71
+ t1 = cdx * bdy;
120
72
  c = splitter * cdx;
121
73
  ahi = c - (c - cdx);
122
74
  alo = cdx - ahi;
123
75
  c = splitter * bdy;
124
76
  bhi = c - (c - bdy);
125
77
  blo = bdy - bhi;
126
- cdxbdy0 = alo * blo - (cdxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
127
- _i = bdxcdy0 - cdxbdy0;
128
- bvirt = bdxcdy0 - _i;
129
- bc[0] = bdxcdy0 - (_i + bvirt) + (bvirt - cdxbdy0);
130
- _j = bdxcdy1 + _i;
131
- bvirt = _j - bdxcdy1;
132
- _0 = bdxcdy1 - (_j - bvirt) + (_i - bvirt);
133
- _i = _0 - cdxbdy1;
78
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
79
+ _i = s0 - t0;
80
+ bvirt = s0 - _i;
81
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
82
+ _j = s1 + _i;
83
+ bvirt = _j - s1;
84
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
85
+ _i = _0 - t1;
134
86
  bvirt = _0 - _i;
135
- bc[1] = _0 - (_i + bvirt) + (bvirt - cdxbdy1);
136
- bc3 = _j + _i;
137
- bvirt = bc3 - _j;
138
- bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);
139
- bc[3] = bc3;
140
- const axbclen = scale_expansion_zeroelim(4, bc, adx, axbc);
141
- const axxbclen = scale_expansion_zeroelim(axbclen, axbc, adx, axxbc);
142
- const aybclen = scale_expansion_zeroelim(4, bc, ady, aybc);
143
- const ayybclen = scale_expansion_zeroelim(aybclen, aybc, ady, ayybc);
144
- const alen = fast_expansion_sum_zeroelim(axxbclen, axxbc, ayybclen, ayybc, adet);
145
-
146
- cdxady1 = cdx * ady;
87
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
88
+ u3 = _j + _i;
89
+ bvirt = u3 - _j;
90
+ bc[2] = _j - (u3 - bvirt) + (_i - bvirt);
91
+ bc[3] = u3;
92
+ s1 = cdx * ady;
147
93
  c = splitter * cdx;
148
94
  ahi = c - (c - cdx);
149
95
  alo = cdx - ahi;
150
96
  c = splitter * ady;
151
97
  bhi = c - (c - ady);
152
98
  blo = ady - bhi;
153
- cdxady0 = alo * blo - (cdxady1 - ahi * bhi - alo * bhi - ahi * blo);
154
- adxcdy1 = adx * cdy;
99
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
100
+ t1 = adx * cdy;
155
101
  c = splitter * adx;
156
102
  ahi = c - (c - adx);
157
103
  alo = adx - ahi;
158
104
  c = splitter * cdy;
159
105
  bhi = c - (c - cdy);
160
106
  blo = cdy - bhi;
161
- adxcdy0 = alo * blo - (adxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
162
- _i = cdxady0 - adxcdy0;
163
- bvirt = cdxady0 - _i;
164
- ca[0] = cdxady0 - (_i + bvirt) + (bvirt - adxcdy0);
165
- _j = cdxady1 + _i;
166
- bvirt = _j - cdxady1;
167
- _0 = cdxady1 - (_j - bvirt) + (_i - bvirt);
168
- _i = _0 - adxcdy1;
107
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
108
+ _i = s0 - t0;
109
+ bvirt = s0 - _i;
110
+ ca[0] = s0 - (_i + bvirt) + (bvirt - t0);
111
+ _j = s1 + _i;
112
+ bvirt = _j - s1;
113
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
114
+ _i = _0 - t1;
169
115
  bvirt = _0 - _i;
170
- ca[1] = _0 - (_i + bvirt) + (bvirt - adxcdy1);
171
- ca3 = _j + _i;
172
- bvirt = ca3 - _j;
173
- ca[2] = _j - (ca3 - bvirt) + (_i - bvirt);
174
- ca[3] = ca3;
175
- const bxcalen = scale_expansion_zeroelim(4, ca, bdx, bxca);
176
- const bxxcalen = scale_expansion_zeroelim(bxcalen, bxca, bdx, bxxca);
177
- const bycalen = scale_expansion_zeroelim(4, ca, bdy, byca);
178
- const byycalen = scale_expansion_zeroelim(bycalen, byca, bdy, byyca);
179
- const blen = fast_expansion_sum_zeroelim(bxxcalen, bxxca, byycalen, byyca, bdet);
180
-
181
- adxbdy1 = adx * bdy;
116
+ ca[1] = _0 - (_i + bvirt) + (bvirt - t1);
117
+ u3 = _j + _i;
118
+ bvirt = u3 - _j;
119
+ ca[2] = _j - (u3 - bvirt) + (_i - bvirt);
120
+ ca[3] = u3;
121
+ s1 = adx * bdy;
182
122
  c = splitter * adx;
183
123
  ahi = c - (c - adx);
184
124
  alo = adx - ahi;
185
125
  c = splitter * bdy;
186
126
  bhi = c - (c - bdy);
187
127
  blo = bdy - bhi;
188
- adxbdy0 = alo * blo - (adxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
189
- bdxady1 = bdx * ady;
128
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
129
+ t1 = bdx * ady;
190
130
  c = splitter * bdx;
191
131
  ahi = c - (c - bdx);
192
132
  alo = bdx - ahi;
193
133
  c = splitter * ady;
194
134
  bhi = c - (c - ady);
195
135
  blo = ady - bhi;
196
- bdxady0 = alo * blo - (bdxady1 - ahi * bhi - alo * bhi - ahi * blo);
197
- _i = adxbdy0 - bdxady0;
198
- bvirt = adxbdy0 - _i;
199
- ab[0] = adxbdy0 - (_i + bvirt) + (bvirt - bdxady0);
200
- _j = adxbdy1 + _i;
201
- bvirt = _j - adxbdy1;
202
- _0 = adxbdy1 - (_j - bvirt) + (_i - bvirt);
203
- _i = _0 - bdxady1;
136
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
137
+ _i = s0 - t0;
138
+ bvirt = s0 - _i;
139
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
140
+ _j = s1 + _i;
141
+ bvirt = _j - s1;
142
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
143
+ _i = _0 - t1;
204
144
  bvirt = _0 - _i;
205
- ab[1] = _0 - (_i + bvirt) + (bvirt - bdxady1);
206
- ab3 = _j + _i;
207
- bvirt = ab3 - _j;
208
- ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);
209
- ab[3] = ab3;
210
- const cxablen = scale_expansion_zeroelim(4, ab, cdx, cxab);
211
- const cxxablen = scale_expansion_zeroelim(cxablen, cxab, cdx, cxxab);
212
- const cyablen = scale_expansion_zeroelim(4, ab, cdy, cyab);
213
- const cyyablen = scale_expansion_zeroelim(cyablen, cyab, cdy, cyyab);
214
- const clen = fast_expansion_sum_zeroelim(cxxablen, cxxab, cyyablen, cyyab, cdet);
215
-
216
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
217
- finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1);
218
-
219
- let det = estimate(finlength, fin1);
145
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
146
+ u3 = _j + _i;
147
+ bvirt = u3 - _j;
148
+ ab[2] = _j - (u3 - bvirt) + (_i - bvirt);
149
+ ab[3] = u3;
150
+
151
+ finlen = sum(
152
+ sum(
153
+ sum(
154
+ scale(scale(4, bc, adx, _8), _8, adx, _16), _16,
155
+ scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,
156
+ sum(
157
+ scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,
158
+ scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,
159
+ sum(
160
+ scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,
161
+ scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);
162
+
163
+ let det = estimate(finlen, fin);
220
164
  let errbound = iccerrboundB * permanent;
221
165
  if (det >= errbound || -det >= errbound) {
222
166
  return det;
@@ -250,269 +194,215 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
250
194
  return det;
251
195
  }
252
196
 
253
- finnow = fin1;
254
- finother = fin2;
255
-
256
197
  if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
257
- adxadx1 = adx * adx;
198
+ s1 = adx * adx;
258
199
  c = splitter * adx;
259
200
  ahi = c - (c - adx);
260
201
  alo = adx - ahi;
261
- adxadx0 = alo * alo - (adxadx1 - ahi * ahi - (ahi + ahi) * alo);
262
- adyady1 = ady * ady;
202
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
203
+ t1 = ady * ady;
263
204
  c = splitter * ady;
264
205
  ahi = c - (c - ady);
265
206
  alo = ady - ahi;
266
- adyady0 = alo * alo - (adyady1 - ahi * ahi - (ahi + ahi) * alo);
267
- _i = adxadx0 + adyady0;
268
- bvirt = _i - adxadx0;
269
- aa[0] = adxadx0 - (_i - bvirt) + (adyady0 - bvirt);
270
- _j = adxadx1 + _i;
271
- bvirt = _j - adxadx1;
272
- _0 = adxadx1 - (_j - bvirt) + (_i - bvirt);
273
- _i = _0 + adyady1;
207
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
208
+ _i = s0 + t0;
209
+ bvirt = _i - s0;
210
+ aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);
211
+ _j = s1 + _i;
212
+ bvirt = _j - s1;
213
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
214
+ _i = _0 + t1;
274
215
  bvirt = _i - _0;
275
- aa[1] = _0 - (_i - bvirt) + (adyady1 - bvirt);
276
- aa3 = _j + _i;
277
- bvirt = aa3 - _j;
278
- aa[2] = _j - (aa3 - bvirt) + (_i - bvirt);
279
- aa[3] = aa3;
216
+ aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);
217
+ u3 = _j + _i;
218
+ bvirt = u3 - _j;
219
+ aa[2] = _j - (u3 - bvirt) + (_i - bvirt);
220
+ aa[3] = u3;
280
221
  }
281
222
  if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
282
- bdxbdx1 = bdx * bdx;
223
+ s1 = bdx * bdx;
283
224
  c = splitter * bdx;
284
225
  ahi = c - (c - bdx);
285
226
  alo = bdx - ahi;
286
- bdxbdx0 = alo * alo - (bdxbdx1 - ahi * ahi - (ahi + ahi) * alo);
287
- bdybdy1 = bdy * bdy;
227
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
228
+ t1 = bdy * bdy;
288
229
  c = splitter * bdy;
289
230
  ahi = c - (c - bdy);
290
231
  alo = bdy - ahi;
291
- bdybdy0 = alo * alo - (bdybdy1 - ahi * ahi - (ahi + ahi) * alo);
292
- _i = bdxbdx0 + bdybdy0;
293
- bvirt = _i - bdxbdx0;
294
- bb[0] = bdxbdx0 - (_i - bvirt) + (bdybdy0 - bvirt);
295
- _j = bdxbdx1 + _i;
296
- bvirt = _j - bdxbdx1;
297
- _0 = bdxbdx1 - (_j - bvirt) + (_i - bvirt);
298
- _i = _0 + bdybdy1;
232
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
233
+ _i = s0 + t0;
234
+ bvirt = _i - s0;
235
+ bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);
236
+ _j = s1 + _i;
237
+ bvirt = _j - s1;
238
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
239
+ _i = _0 + t1;
299
240
  bvirt = _i - _0;
300
- bb[1] = _0 - (_i - bvirt) + (bdybdy1 - bvirt);
301
- bb3 = _j + _i;
302
- bvirt = bb3 - _j;
303
- bb[2] = _j - (bb3 - bvirt) + (_i - bvirt);
304
- bb[3] = bb3;
241
+ bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);
242
+ u3 = _j + _i;
243
+ bvirt = u3 - _j;
244
+ bb[2] = _j - (u3 - bvirt) + (_i - bvirt);
245
+ bb[3] = u3;
305
246
  }
306
247
  if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
307
- cdxcdx1 = cdx * cdx;
248
+ s1 = cdx * cdx;
308
249
  c = splitter * cdx;
309
250
  ahi = c - (c - cdx);
310
251
  alo = cdx - ahi;
311
- cdxcdx0 = alo * alo - (cdxcdx1 - ahi * ahi - (ahi + ahi) * alo);
312
- cdycdy1 = cdy * cdy;
252
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
253
+ t1 = cdy * cdy;
313
254
  c = splitter * cdy;
314
255
  ahi = c - (c - cdy);
315
256
  alo = cdy - ahi;
316
- cdycdy0 = alo * alo - (cdycdy1 - ahi * ahi - (ahi + ahi) * alo);
317
- _i = cdxcdx0 + cdycdy0;
318
- bvirt = _i - cdxcdx0;
319
- cc[0] = cdxcdx0 - (_i - bvirt) + (cdycdy0 - bvirt);
320
- _j = cdxcdx1 + _i;
321
- bvirt = _j - cdxcdx1;
322
- _0 = cdxcdx1 - (_j - bvirt) + (_i - bvirt);
323
- _i = _0 + cdycdy1;
257
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
258
+ _i = s0 + t0;
259
+ bvirt = _i - s0;
260
+ cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);
261
+ _j = s1 + _i;
262
+ bvirt = _j - s1;
263
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
264
+ _i = _0 + t1;
324
265
  bvirt = _i - _0;
325
- cc[1] = _0 - (_i - bvirt) + (cdycdy1 - bvirt);
326
- cc3 = _j + _i;
327
- bvirt = cc3 - _j;
328
- cc[2] = _j - (cc3 - bvirt) + (_i - bvirt);
329
- cc[3] = cc3;
266
+ cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);
267
+ u3 = _j + _i;
268
+ bvirt = u3 - _j;
269
+ cc[2] = _j - (u3 - bvirt) + (_i - bvirt);
270
+ cc[3] = u3;
330
271
  }
331
272
 
332
273
  if (adxtail !== 0) {
333
- axtbclen = scale_expansion_zeroelim(4, bc, adxtail, axtbc);
334
- temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, 2 * adx, temp16a);
335
-
336
- const axtcclen = scale_expansion_zeroelim(4, cc, adxtail, axtcc);
337
- temp16blen = scale_expansion_zeroelim(axtcclen, axtcc, bdy, temp16b);
338
-
339
- const axtbblen = scale_expansion_zeroelim(4, bb, adxtail, axtbb);
340
- temp16clen = scale_expansion_zeroelim(axtbblen, axtbb, -cdy, temp16c);
341
-
342
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
343
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
344
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
345
- finswap = finnow; finnow = finother; finother = finswap;
274
+ axtbclen = scale(4, bc, adxtail, axtbc);
275
+ finlen = finadd(finlen, sum_three(
276
+ scale(axtbclen, axtbc, 2 * adx, _16), _16,
277
+ scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,
278
+ scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);
346
279
  }
347
280
  if (adytail !== 0) {
348
- aytbclen = scale_expansion_zeroelim(4, bc, adytail, aytbc);
349
- temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, 2 * ady, temp16a);
350
-
351
- const aytbblen = scale_expansion_zeroelim(4, bb, adytail, aytbb);
352
- temp16blen = scale_expansion_zeroelim(aytbblen, aytbb, cdx, temp16b);
353
-
354
- const aytcclen = scale_expansion_zeroelim(4, cc, adytail, aytcc);
355
- temp16clen = scale_expansion_zeroelim(aytcclen, aytcc, -bdx, temp16c);
356
-
357
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
358
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
359
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
360
- finswap = finnow; finnow = finother; finother = finswap;
281
+ aytbclen = scale(4, bc, adytail, aytbc);
282
+ finlen = finadd(finlen, sum_three(
283
+ scale(aytbclen, aytbc, 2 * ady, _16), _16,
284
+ scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,
285
+ scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);
361
286
  }
362
287
  if (bdxtail !== 0) {
363
- bxtcalen = scale_expansion_zeroelim(4, ca, bdxtail, bxtca);
364
- temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, 2 * bdx, temp16a);
365
-
366
- const bxtaalen = scale_expansion_zeroelim(4, aa, bdxtail, bxtaa);
367
- temp16blen = scale_expansion_zeroelim(bxtaalen, bxtaa, cdy, temp16b);
368
-
369
- const bxtcclen = scale_expansion_zeroelim(4, cc, bdxtail, bxtcc);
370
- temp16clen = scale_expansion_zeroelim(bxtcclen, bxtcc, -ady, temp16c);
371
-
372
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
373
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
374
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
375
- finswap = finnow; finnow = finother; finother = finswap;
288
+ bxtcalen = scale(4, ca, bdxtail, bxtca);
289
+ finlen = finadd(finlen, sum_three(
290
+ scale(bxtcalen, bxtca, 2 * bdx, _16), _16,
291
+ scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,
292
+ scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);
376
293
  }
377
294
  if (bdytail !== 0) {
378
- bytcalen = scale_expansion_zeroelim(4, ca, bdytail, bytca);
379
- temp16alen = scale_expansion_zeroelim(bytcalen, bytca, 2 * bdy, temp16a);
380
-
381
- const bytcclen = scale_expansion_zeroelim(4, cc, bdytail, bytcc);
382
- temp16blen = scale_expansion_zeroelim(bytcclen, bytcc, adx, temp16b);
383
-
384
- const bytaalen = scale_expansion_zeroelim(4, aa, bdytail, bytaa);
385
- temp16clen = scale_expansion_zeroelim(bytaalen, bytaa, -cdx, temp16c);
386
-
387
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
388
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
389
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
390
- finswap = finnow; finnow = finother; finother = finswap;
295
+ bytcalen = scale(4, ca, bdytail, bytca);
296
+ finlen = finadd(finlen, sum_three(
297
+ scale(bytcalen, bytca, 2 * bdy, _16), _16,
298
+ scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,
299
+ scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);
391
300
  }
392
301
  if (cdxtail !== 0) {
393
- cxtablen = scale_expansion_zeroelim(4, ab, cdxtail, cxtab);
394
- temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, 2 * cdx, temp16a);
395
-
396
- const cxtbblen = scale_expansion_zeroelim(4, bb, cdxtail, cxtbb);
397
- temp16blen = scale_expansion_zeroelim(cxtbblen, cxtbb, ady, temp16b);
398
-
399
- const cxtaalen = scale_expansion_zeroelim(4, aa, cdxtail, cxtaa);
400
- temp16clen = scale_expansion_zeroelim(cxtaalen, cxtaa, -bdy, temp16c);
401
-
402
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
403
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
404
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
405
- finswap = finnow; finnow = finother; finother = finswap;
302
+ cxtablen = scale(4, ab, cdxtail, cxtab);
303
+ finlen = finadd(finlen, sum_three(
304
+ scale(cxtablen, cxtab, 2 * cdx, _16), _16,
305
+ scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,
306
+ scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);
406
307
  }
407
308
  if (cdytail !== 0) {
408
- cytablen = scale_expansion_zeroelim(4, ab, cdytail, cytab);
409
- temp16alen = scale_expansion_zeroelim(cytablen, cytab, 2 * cdy, temp16a);
410
-
411
- const cytaalen = scale_expansion_zeroelim(4, aa, cdytail, cytaa);
412
- temp16blen = scale_expansion_zeroelim(cytaalen, cytaa, bdx, temp16b);
413
-
414
- const cytbblen = scale_expansion_zeroelim(4, bb, cdytail, cytbb);
415
- temp16clen = scale_expansion_zeroelim(cytbblen, cytbb, -adx, temp16c);
416
-
417
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
418
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
419
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
420
- finswap = finnow; finnow = finother; finother = finswap;
309
+ cytablen = scale(4, ab, cdytail, cytab);
310
+ finlen = finadd(finlen, sum_three(
311
+ scale(cytablen, cytab, 2 * cdy, _16), _16,
312
+ scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,
313
+ scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);
421
314
  }
422
315
 
423
316
  if (adxtail !== 0 || adytail !== 0) {
424
317
  if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
425
- ti1 = bdxtail * cdy;
318
+ s1 = bdxtail * cdy;
426
319
  c = splitter * bdxtail;
427
320
  ahi = c - (c - bdxtail);
428
321
  alo = bdxtail - ahi;
429
322
  c = splitter * cdy;
430
323
  bhi = c - (c - cdy);
431
324
  blo = cdy - bhi;
432
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
433
- tj1 = bdx * cdytail;
325
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
326
+ t1 = bdx * cdytail;
434
327
  c = splitter * bdx;
435
328
  ahi = c - (c - bdx);
436
329
  alo = bdx - ahi;
437
330
  c = splitter * cdytail;
438
331
  bhi = c - (c - cdytail);
439
332
  blo = cdytail - bhi;
440
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
441
- _i = ti0 + tj0;
442
- bvirt = _i - ti0;
443
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
444
- _j = ti1 + _i;
445
- bvirt = _j - ti1;
446
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
447
- _i = _0 + tj1;
333
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
334
+ _i = s0 + t0;
335
+ bvirt = _i - s0;
336
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
337
+ _j = s1 + _i;
338
+ bvirt = _j - s1;
339
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
340
+ _i = _0 + t1;
448
341
  bvirt = _i - _0;
449
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
342
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
450
343
  u3 = _j + _i;
451
344
  bvirt = u3 - _j;
452
345
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
453
346
  u[3] = u3;
454
- negate = -bdy;
455
- ti1 = cdxtail * negate;
347
+ s1 = cdxtail * -bdy;
456
348
  c = splitter * cdxtail;
457
349
  ahi = c - (c - cdxtail);
458
350
  alo = cdxtail - ahi;
459
- c = splitter * negate;
460
- bhi = c - (c - negate);
461
- blo = negate - bhi;
462
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
463
- negate = -bdytail;
464
- tj1 = cdx * negate;
351
+ c = splitter * -bdy;
352
+ bhi = c - (c - -bdy);
353
+ blo = -bdy - bhi;
354
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
355
+ t1 = cdx * -bdytail;
465
356
  c = splitter * cdx;
466
357
  ahi = c - (c - cdx);
467
358
  alo = cdx - ahi;
468
- c = splitter * negate;
469
- bhi = c - (c - negate);
470
- blo = negate - bhi;
471
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
472
- _i = ti0 + tj0;
473
- bvirt = _i - ti0;
474
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
475
- _j = ti1 + _i;
476
- bvirt = _j - ti1;
477
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
478
- _i = _0 + tj1;
359
+ c = splitter * -bdytail;
360
+ bhi = c - (c - -bdytail);
361
+ blo = -bdytail - bhi;
362
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
363
+ _i = s0 + t0;
364
+ bvirt = _i - s0;
365
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
366
+ _j = s1 + _i;
367
+ bvirt = _j - s1;
368
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
369
+ _i = _0 + t1;
479
370
  bvirt = _i - _0;
480
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
481
- v3 = _j + _i;
482
- bvirt = v3 - _j;
483
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
484
- v[3] = v3;
485
- bctlen = fast_expansion_sum_zeroelim(4, u, 4, v, bct);
486
-
487
- ti1 = bdxtail * cdytail;
371
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
372
+ u3 = _j + _i;
373
+ bvirt = u3 - _j;
374
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
375
+ v[3] = u3;
376
+ bctlen = sum(4, u, 4, v, bct);
377
+ s1 = bdxtail * cdytail;
488
378
  c = splitter * bdxtail;
489
379
  ahi = c - (c - bdxtail);
490
380
  alo = bdxtail - ahi;
491
381
  c = splitter * cdytail;
492
382
  bhi = c - (c - cdytail);
493
383
  blo = cdytail - bhi;
494
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
495
- tj1 = cdxtail * bdytail;
384
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
385
+ t1 = cdxtail * bdytail;
496
386
  c = splitter * cdxtail;
497
387
  ahi = c - (c - cdxtail);
498
388
  alo = cdxtail - ahi;
499
389
  c = splitter * bdytail;
500
390
  bhi = c - (c - bdytail);
501
391
  blo = bdytail - bhi;
502
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
503
- _i = ti0 - tj0;
504
- bvirt = ti0 - _i;
505
- bctt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
506
- _j = ti1 + _i;
507
- bvirt = _j - ti1;
508
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
509
- _i = _0 - tj1;
392
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
393
+ _i = s0 - t0;
394
+ bvirt = s0 - _i;
395
+ bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);
396
+ _j = s1 + _i;
397
+ bvirt = _j - s1;
398
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
399
+ _i = _0 - t1;
510
400
  bvirt = _0 - _i;
511
- bctt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
512
- bctt3 = _j + _i;
513
- bvirt = bctt3 - _j;
514
- bctt[2] = _j - (bctt3 - bvirt) + (_i - bvirt);
515
- bctt[3] = bctt3;
401
+ bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);
402
+ u3 = _j + _i;
403
+ bvirt = u3 - _j;
404
+ bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);
405
+ bctt[3] = u3;
516
406
  bcttlen = 4;
517
407
  } else {
518
408
  bct[0] = 0;
@@ -520,149 +410,130 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
520
410
  bctt[0] = 0;
521
411
  bcttlen = 1;
522
412
  }
523
-
524
413
  if (adxtail !== 0) {
525
- temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, adxtail, temp16a);
526
- const axtbctlen = scale_expansion_zeroelim(bctlen, bct, adxtail, axtbct);
527
- temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, 2 * adx, temp32a);
528
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
529
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
530
- finswap = finnow; finnow = finother; finother = finswap;
414
+ const len = scale(bctlen, bct, adxtail, _16c);
415
+ finlen = finadd(finlen, sum(
416
+ scale(axtbclen, axtbc, adxtail, _16), _16,
417
+ scale(len, _16c, 2 * adx, _32), _32, _48), _48);
418
+
419
+ const len2 = scale(bcttlen, bctt, adxtail, _8);
420
+ finlen = finadd(finlen, sum_three(
421
+ scale(len2, _8, 2 * adx, _16), _16,
422
+ scale(len2, _8, adxtail, _16b), _16b,
423
+ scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);
531
424
 
532
425
  if (bdytail !== 0) {
533
- temp8len = scale_expansion_zeroelim(4, cc, adxtail, temp8);
534
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, temp16a);
535
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
536
- finswap = finnow; finnow = finother; finother = finswap;
426
+ finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);
537
427
  }
538
428
  if (cdytail !== 0) {
539
- temp8len = scale_expansion_zeroelim(4, bb, -adxtail, temp8);
540
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, temp16a);
541
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
542
- finswap = finnow; finnow = finother; finother = finswap;
429
+ finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);
543
430
  }
544
-
545
- temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, adxtail, temp32a);
546
- const axtbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adxtail, axtbctt);
547
- temp16alen = scale_expansion_zeroelim(axtbcttlen, axtbctt, 2 * adx, temp16a);
548
- temp16blen = scale_expansion_zeroelim(axtbcttlen, axtbctt, adxtail, temp16b);
549
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
550
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
551
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
552
- finswap = finnow; finnow = finother; finother = finswap;
553
431
  }
554
-
555
432
  if (adytail !== 0) {
556
- temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, adytail, temp16a);
557
- const aytbctlen = scale_expansion_zeroelim(bctlen, bct, adytail, aytbct);
558
- temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, 2 * ady, temp32a);
559
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
560
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
561
- finswap = finnow; finnow = finother; finother = finswap;
562
-
563
- temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, adytail, temp32a);
564
- const aytbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adytail, aytbctt);
565
- temp16alen = scale_expansion_zeroelim(aytbcttlen, aytbctt, 2 * ady, temp16a);
566
- temp16blen = scale_expansion_zeroelim(aytbcttlen, aytbctt, adytail, temp16b);
567
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
568
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
569
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
570
- finswap = finnow; finnow = finother; finother = finswap;
433
+ const len = scale(bctlen, bct, adytail, _16c);
434
+ finlen = finadd(finlen, sum(
435
+ scale(aytbclen, aytbc, adytail, _16), _16,
436
+ scale(len, _16c, 2 * ady, _32), _32, _48), _48);
437
+
438
+ const len2 = scale(bcttlen, bctt, adytail, _8);
439
+ finlen = finadd(finlen, sum_three(
440
+ scale(len2, _8, 2 * ady, _16), _16,
441
+ scale(len2, _8, adytail, _16b), _16b,
442
+ scale(len, _16c, adytail, _32), _32, _32b, _64), _64);
571
443
  }
572
444
  }
573
445
  if (bdxtail !== 0 || bdytail !== 0) {
574
446
  if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
575
- ti1 = cdxtail * ady;
447
+ s1 = cdxtail * ady;
576
448
  c = splitter * cdxtail;
577
449
  ahi = c - (c - cdxtail);
578
450
  alo = cdxtail - ahi;
579
451
  c = splitter * ady;
580
452
  bhi = c - (c - ady);
581
453
  blo = ady - bhi;
582
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
583
- tj1 = cdx * adytail;
454
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
455
+ t1 = cdx * adytail;
584
456
  c = splitter * cdx;
585
457
  ahi = c - (c - cdx);
586
458
  alo = cdx - ahi;
587
459
  c = splitter * adytail;
588
460
  bhi = c - (c - adytail);
589
461
  blo = adytail - bhi;
590
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
591
- _i = ti0 + tj0;
592
- bvirt = _i - ti0;
593
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
594
- _j = ti1 + _i;
595
- bvirt = _j - ti1;
596
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
597
- _i = _0 + tj1;
462
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
463
+ _i = s0 + t0;
464
+ bvirt = _i - s0;
465
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
466
+ _j = s1 + _i;
467
+ bvirt = _j - s1;
468
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
469
+ _i = _0 + t1;
598
470
  bvirt = _i - _0;
599
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
471
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
600
472
  u3 = _j + _i;
601
473
  bvirt = u3 - _j;
602
474
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
603
475
  u[3] = u3;
604
- negate = -cdy;
605
- ti1 = adxtail * negate;
476
+ n1 = -cdy;
477
+ n0 = -cdytail;
478
+ s1 = adxtail * n1;
606
479
  c = splitter * adxtail;
607
480
  ahi = c - (c - adxtail);
608
481
  alo = adxtail - ahi;
609
- c = splitter * negate;
610
- bhi = c - (c - negate);
611
- blo = negate - bhi;
612
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
613
- negate = -cdytail;
614
- tj1 = adx * negate;
482
+ c = splitter * n1;
483
+ bhi = c - (c - n1);
484
+ blo = n1 - bhi;
485
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
486
+ t1 = adx * n0;
615
487
  c = splitter * adx;
616
488
  ahi = c - (c - adx);
617
489
  alo = adx - ahi;
618
- c = splitter * negate;
619
- bhi = c - (c - negate);
620
- blo = negate - bhi;
621
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
622
- _i = ti0 + tj0;
623
- bvirt = _i - ti0;
624
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
625
- _j = ti1 + _i;
626
- bvirt = _j - ti1;
627
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
628
- _i = _0 + tj1;
490
+ c = splitter * n0;
491
+ bhi = c - (c - n0);
492
+ blo = n0 - bhi;
493
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
494
+ _i = s0 + t0;
495
+ bvirt = _i - s0;
496
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
497
+ _j = s1 + _i;
498
+ bvirt = _j - s1;
499
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
500
+ _i = _0 + t1;
629
501
  bvirt = _i - _0;
630
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
631
- v3 = _j + _i;
632
- bvirt = v3 - _j;
633
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
634
- v[3] = v3;
635
- catlen = fast_expansion_sum_zeroelim(4, u, 4, v, cat);
636
-
637
- ti1 = cdxtail * adytail;
502
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
503
+ u3 = _j + _i;
504
+ bvirt = u3 - _j;
505
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
506
+ v[3] = u3;
507
+ catlen = sum(4, u, 4, v, cat);
508
+ s1 = cdxtail * adytail;
638
509
  c = splitter * cdxtail;
639
510
  ahi = c - (c - cdxtail);
640
511
  alo = cdxtail - ahi;
641
512
  c = splitter * adytail;
642
513
  bhi = c - (c - adytail);
643
514
  blo = adytail - bhi;
644
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
645
- tj1 = adxtail * cdytail;
515
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
516
+ t1 = adxtail * cdytail;
646
517
  c = splitter * adxtail;
647
518
  ahi = c - (c - adxtail);
648
519
  alo = adxtail - ahi;
649
520
  c = splitter * cdytail;
650
521
  bhi = c - (c - cdytail);
651
522
  blo = cdytail - bhi;
652
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
653
- _i = ti0 - tj0;
654
- bvirt = ti0 - _i;
655
- catt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
656
- _j = ti1 + _i;
657
- bvirt = _j - ti1;
658
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
659
- _i = _0 - tj1;
523
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
524
+ _i = s0 - t0;
525
+ bvirt = s0 - _i;
526
+ catt[0] = s0 - (_i + bvirt) + (bvirt - t0);
527
+ _j = s1 + _i;
528
+ bvirt = _j - s1;
529
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
530
+ _i = _0 - t1;
660
531
  bvirt = _0 - _i;
661
- catt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
662
- catt3 = _j + _i;
663
- bvirt = catt3 - _j;
664
- catt[2] = _j - (catt3 - bvirt) + (_i - bvirt);
665
- catt[3] = catt3;
532
+ catt[1] = _0 - (_i + bvirt) + (bvirt - t1);
533
+ u3 = _j + _i;
534
+ bvirt = u3 - _j;
535
+ catt[2] = _j - (u3 - bvirt) + (_i - bvirt);
536
+ catt[3] = u3;
666
537
  cattlen = 4;
667
538
  } else {
668
539
  cat[0] = 0;
@@ -670,147 +541,130 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
670
541
  catt[0] = 0;
671
542
  cattlen = 1;
672
543
  }
673
-
674
544
  if (bdxtail !== 0) {
675
- temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, bdxtail, temp16a);
676
- const bxtcatlen = scale_expansion_zeroelim(catlen, cat, bdxtail, bxtcat);
677
- temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, 2 * bdx, temp32a);
678
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
679
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
680
- finswap = finnow; finnow = finother; finother = finswap;
545
+ const len = scale(catlen, cat, bdxtail, _16c);
546
+ finlen = finadd(finlen, sum(
547
+ scale(bxtcalen, bxtca, bdxtail, _16), _16,
548
+ scale(len, _16c, 2 * bdx, _32), _32, _48), _48);
549
+
550
+ const len2 = scale(cattlen, catt, bdxtail, _8);
551
+ finlen = finadd(finlen, sum_three(
552
+ scale(len2, _8, 2 * bdx, _16), _16,
553
+ scale(len2, _8, bdxtail, _16b), _16b,
554
+ scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);
555
+
681
556
  if (cdytail !== 0) {
682
- temp8len = scale_expansion_zeroelim(4, aa, bdxtail, temp8);
683
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, temp16a);
684
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
685
- finswap = finnow; finnow = finother; finother = finswap;
557
+ finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);
686
558
  }
687
559
  if (adytail !== 0) {
688
- temp8len = scale_expansion_zeroelim(4, cc, -bdxtail, temp8);
689
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, temp16a);
690
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
691
- finswap = finnow; finnow = finother; finother = finswap;
560
+ finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);
692
561
  }
693
-
694
- temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, bdxtail, temp32a);
695
- const bxtcattlen = scale_expansion_zeroelim(cattlen, catt, bdxtail, bxtcatt);
696
- temp16alen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, 2 * bdx, temp16a);
697
- temp16blen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, bdxtail, temp16b);
698
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
699
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
700
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
701
- finswap = finnow; finnow = finother; finother = finswap;
702
562
  }
703
563
  if (bdytail !== 0) {
704
- temp16alen = scale_expansion_zeroelim(bytcalen, bytca, bdytail, temp16a);
705
- const bytcatlen = scale_expansion_zeroelim(catlen, cat, bdytail, bytcat);
706
- temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, 2 * bdy, temp32a);
707
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
708
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
709
- finswap = finnow; finnow = finother; finother = finswap;
710
-
711
- temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, bdytail, temp32a);
712
- const bytcattlen = scale_expansion_zeroelim(cattlen, catt, bdytail, bytcatt);
713
- temp16alen = scale_expansion_zeroelim(bytcattlen, bytcatt, 2 * bdy, temp16a);
714
- temp16blen = scale_expansion_zeroelim(bytcattlen, bytcatt, bdytail, temp16b);
715
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
716
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
717
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
718
- finswap = finnow; finnow = finother; finother = finswap;
564
+ const len = scale(catlen, cat, bdytail, _16c);
565
+ finlen = finadd(finlen, sum(
566
+ scale(bytcalen, bytca, bdytail, _16), _16,
567
+ scale(len, _16c, 2 * bdy, _32), _32, _48), _48);
568
+
569
+ const len2 = scale(cattlen, catt, bdytail, _8);
570
+ finlen = finadd(finlen, sum_three(
571
+ scale(len2, _8, 2 * bdy, _16), _16,
572
+ scale(len2, _8, bdytail, _16b), _16b,
573
+ scale(len, _16c, bdytail, _32), _32, _32b, _64), _64);
719
574
  }
720
575
  }
721
576
  if (cdxtail !== 0 || cdytail !== 0) {
722
577
  if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
723
- ti1 = adxtail * bdy;
578
+ s1 = adxtail * bdy;
724
579
  c = splitter * adxtail;
725
580
  ahi = c - (c - adxtail);
726
581
  alo = adxtail - ahi;
727
582
  c = splitter * bdy;
728
583
  bhi = c - (c - bdy);
729
584
  blo = bdy - bhi;
730
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
731
- tj1 = adx * bdytail;
585
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
586
+ t1 = adx * bdytail;
732
587
  c = splitter * adx;
733
588
  ahi = c - (c - adx);
734
589
  alo = adx - ahi;
735
590
  c = splitter * bdytail;
736
591
  bhi = c - (c - bdytail);
737
592
  blo = bdytail - bhi;
738
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
739
- _i = ti0 + tj0;
740
- bvirt = _i - ti0;
741
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
742
- _j = ti1 + _i;
743
- bvirt = _j - ti1;
744
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
745
- _i = _0 + tj1;
593
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
594
+ _i = s0 + t0;
595
+ bvirt = _i - s0;
596
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
597
+ _j = s1 + _i;
598
+ bvirt = _j - s1;
599
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
600
+ _i = _0 + t1;
746
601
  bvirt = _i - _0;
747
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
602
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
748
603
  u3 = _j + _i;
749
604
  bvirt = u3 - _j;
750
605
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
751
606
  u[3] = u3;
752
- negate = -ady;
753
- ti1 = bdxtail * negate;
607
+ n1 = -ady;
608
+ n0 = -adytail;
609
+ s1 = bdxtail * n1;
754
610
  c = splitter * bdxtail;
755
611
  ahi = c - (c - bdxtail);
756
612
  alo = bdxtail - ahi;
757
- c = splitter * negate;
758
- bhi = c - (c - negate);
759
- blo = negate - bhi;
760
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
761
- negate = -adytail;
762
- tj1 = bdx * negate;
613
+ c = splitter * n1;
614
+ bhi = c - (c - n1);
615
+ blo = n1 - bhi;
616
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
617
+ t1 = bdx * n0;
763
618
  c = splitter * bdx;
764
619
  ahi = c - (c - bdx);
765
620
  alo = bdx - ahi;
766
- c = splitter * negate;
767
- bhi = c - (c - negate);
768
- blo = negate - bhi;
769
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
770
- _i = ti0 + tj0;
771
- bvirt = _i - ti0;
772
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
773
- _j = ti1 + _i;
774
- bvirt = _j - ti1;
775
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
776
- _i = _0 + tj1;
621
+ c = splitter * n0;
622
+ bhi = c - (c - n0);
623
+ blo = n0 - bhi;
624
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
625
+ _i = s0 + t0;
626
+ bvirt = _i - s0;
627
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
628
+ _j = s1 + _i;
629
+ bvirt = _j - s1;
630
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
631
+ _i = _0 + t1;
777
632
  bvirt = _i - _0;
778
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
779
- v3 = _j + _i;
780
- bvirt = v3 - _j;
781
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
782
- v[3] = v3;
783
- abtlen = fast_expansion_sum_zeroelim(4, u, 4, v, abt);
784
-
785
- ti1 = adxtail * bdytail;
633
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
634
+ u3 = _j + _i;
635
+ bvirt = u3 - _j;
636
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
637
+ v[3] = u3;
638
+ abtlen = sum(4, u, 4, v, abt);
639
+ s1 = adxtail * bdytail;
786
640
  c = splitter * adxtail;
787
641
  ahi = c - (c - adxtail);
788
642
  alo = adxtail - ahi;
789
643
  c = splitter * bdytail;
790
644
  bhi = c - (c - bdytail);
791
645
  blo = bdytail - bhi;
792
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
793
- tj1 = bdxtail * adytail;
646
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
647
+ t1 = bdxtail * adytail;
794
648
  c = splitter * bdxtail;
795
649
  ahi = c - (c - bdxtail);
796
650
  alo = bdxtail - ahi;
797
651
  c = splitter * adytail;
798
652
  bhi = c - (c - adytail);
799
653
  blo = adytail - bhi;
800
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
801
- _i = ti0 - tj0;
802
- bvirt = ti0 - _i;
803
- abtt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
804
- _j = ti1 + _i;
805
- bvirt = _j - ti1;
806
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
807
- _i = _0 - tj1;
654
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
655
+ _i = s0 - t0;
656
+ bvirt = s0 - _i;
657
+ abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);
658
+ _j = s1 + _i;
659
+ bvirt = _j - s1;
660
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
661
+ _i = _0 - t1;
808
662
  bvirt = _0 - _i;
809
- abtt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
810
- abtt3 = _j + _i;
811
- bvirt = abtt3 - _j;
812
- abtt[2] = _j - (abtt3 - bvirt) + (_i - bvirt);
813
- abtt[3] = abtt3;
663
+ abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);
664
+ u3 = _j + _i;
665
+ bvirt = u3 - _j;
666
+ abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);
667
+ abtt[3] = u3;
814
668
  abttlen = 4;
815
669
  } else {
816
670
  abt[0] = 0;
@@ -818,56 +672,40 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
818
672
  abtt[0] = 0;
819
673
  abttlen = 1;
820
674
  }
821
-
822
675
  if (cdxtail !== 0) {
823
- temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, cdxtail, temp16a);
824
- const cxtabtlen = scale_expansion_zeroelim(abtlen, abt, cdxtail, cxtabt);
825
- temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, 2 * cdx, temp32a);
826
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
827
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
828
- finswap = finnow; finnow = finother; finother = finswap;
676
+ const len = scale(abtlen, abt, cdxtail, _16c);
677
+ finlen = finadd(finlen, sum(
678
+ scale(cxtablen, cxtab, cdxtail, _16), _16,
679
+ scale(len, _16c, 2 * cdx, _32), _32, _48), _48);
680
+
681
+ const len2 = scale(abttlen, abtt, cdxtail, _8);
682
+ finlen = finadd(finlen, sum_three(
683
+ scale(len2, _8, 2 * cdx, _16), _16,
684
+ scale(len2, _8, cdxtail, _16b), _16b,
685
+ scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);
686
+
829
687
  if (adytail !== 0) {
830
- temp8len = scale_expansion_zeroelim(4, bb, cdxtail, temp8);
831
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, temp16a);
832
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
833
- finswap = finnow; finnow = finother; finother = finswap;
688
+ finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);
834
689
  }
835
690
  if (bdytail !== 0) {
836
- temp8len = scale_expansion_zeroelim(4, aa, -cdxtail, temp8);
837
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, temp16a);
838
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
839
- finswap = finnow; finnow = finother; finother = finswap;
691
+ finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);
840
692
  }
841
-
842
- temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, cdxtail, temp32a);
843
- const cxtabttlen = scale_expansion_zeroelim(abttlen, abtt, cdxtail, cxtabtt);
844
- temp16alen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, 2 * cdx, temp16a);
845
- temp16blen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, cdxtail, temp16b);
846
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
847
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
848
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
849
- finswap = finnow; finnow = finother; finother = finswap;
850
693
  }
851
694
  if (cdytail !== 0) {
852
- temp16alen = scale_expansion_zeroelim(cytablen, cytab, cdytail, temp16a);
853
- const cytabtlen = scale_expansion_zeroelim(abtlen, abt, cdytail, cytabt);
854
- temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, 2 * cdy, temp32a);
855
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
856
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
857
- finswap = finnow; finnow = finother; finother = finswap;
858
-
859
- temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, cdytail, temp32a);
860
- const cytabttlen = scale_expansion_zeroelim(abttlen, abtt, cdytail, cytabtt);
861
- temp16alen = scale_expansion_zeroelim(cytabttlen, cytabtt, 2 * cdy, temp16a);
862
- temp16blen = scale_expansion_zeroelim(cytabttlen, cytabtt, cdytail, temp16b);
863
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
864
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
865
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
866
- finswap = finnow; finnow = finother; finother = finswap;
695
+ const len = scale(abtlen, abt, cdytail, _16c);
696
+ finlen = finadd(finlen, sum(
697
+ scale(cytablen, cytab, cdytail, _16), _16,
698
+ scale(len, _16c, 2 * cdy, _32), _32, _48), _48);
699
+
700
+ const len2 = scale(abttlen, abtt, cdytail, _8);
701
+ finlen = finadd(finlen, sum_three(
702
+ scale(len2, _8, 2 * cdy, _16), _16,
703
+ scale(len2, _8, cdytail, _16b), _16b,
704
+ scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);
867
705
  }
868
706
  }
869
707
 
870
- return finnow[finlength - 1];
708
+ return fin[finlen - 1];
871
709
  }
872
710
 
873
711
  export function incircle(ax, ay, bx, by, cx, cy, dx, dy) {