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