| 1 | import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';
|
|---|
| 2 |
|
|---|
| 3 | const iccerrboundA = (10 + 96 * epsilon) * epsilon;
|
|---|
| 4 | const iccerrboundB = (4 + 48 * epsilon) * epsilon;
|
|---|
| 5 | const iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;
|
|---|
| 6 |
|
|---|
| 7 | const bc = vec(4);
|
|---|
| 8 | const ca = vec(4);
|
|---|
| 9 | const ab = vec(4);
|
|---|
| 10 | const aa = vec(4);
|
|---|
| 11 | const bb = vec(4);
|
|---|
| 12 | const cc = vec(4);
|
|---|
| 13 | const u = vec(4);
|
|---|
| 14 | const v = vec(4);
|
|---|
| 15 | const axtbc = vec(8);
|
|---|
| 16 | const aytbc = vec(8);
|
|---|
| 17 | const bxtca = vec(8);
|
|---|
| 18 | const bytca = vec(8);
|
|---|
| 19 | const cxtab = vec(8);
|
|---|
| 20 | const cytab = vec(8);
|
|---|
| 21 | const abt = vec(8);
|
|---|
| 22 | const bct = vec(8);
|
|---|
| 23 | const cat = vec(8);
|
|---|
| 24 | const abtt = vec(4);
|
|---|
| 25 | const bctt = vec(4);
|
|---|
| 26 | const catt = vec(4);
|
|---|
| 27 |
|
|---|
| 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 | }
|
|---|
| 45 |
|
|---|
| 46 | function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
|
|---|
| 47 | let finlen;
|
|---|
| 48 | let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;
|
|---|
| 49 | let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;
|
|---|
| 50 | let abtlen, bctlen, catlen;
|
|---|
| 51 | let abttlen, bcttlen, cattlen;
|
|---|
| 52 | let n1, n0;
|
|---|
| 53 |
|
|---|
| 54 | let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
|
|---|
| 55 |
|
|---|
| 56 | const adx = ax - dx;
|
|---|
| 57 | const bdx = bx - dx;
|
|---|
| 58 | const cdx = cx - dx;
|
|---|
| 59 | const ady = ay - dy;
|
|---|
| 60 | const bdy = by - dy;
|
|---|
| 61 | const cdy = cy - dy;
|
|---|
| 62 |
|
|---|
| 63 | s1 = bdx * cdy;
|
|---|
| 64 | c = splitter * bdx;
|
|---|
| 65 | ahi = c - (c - bdx);
|
|---|
| 66 | alo = bdx - ahi;
|
|---|
| 67 | c = splitter * cdy;
|
|---|
| 68 | bhi = c - (c - cdy);
|
|---|
| 69 | blo = cdy - bhi;
|
|---|
| 70 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 71 | t1 = cdx * bdy;
|
|---|
| 72 | c = splitter * cdx;
|
|---|
| 73 | ahi = c - (c - cdx);
|
|---|
| 74 | alo = cdx - ahi;
|
|---|
| 75 | c = splitter * bdy;
|
|---|
| 76 | bhi = c - (c - bdy);
|
|---|
| 77 | blo = bdy - bhi;
|
|---|
| 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;
|
|---|
| 86 | bvirt = _0 - _i;
|
|---|
| 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;
|
|---|
| 93 | c = splitter * cdx;
|
|---|
| 94 | ahi = c - (c - cdx);
|
|---|
| 95 | alo = cdx - ahi;
|
|---|
| 96 | c = splitter * ady;
|
|---|
| 97 | bhi = c - (c - ady);
|
|---|
| 98 | blo = ady - bhi;
|
|---|
| 99 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 100 | t1 = adx * cdy;
|
|---|
| 101 | c = splitter * adx;
|
|---|
| 102 | ahi = c - (c - adx);
|
|---|
| 103 | alo = adx - ahi;
|
|---|
| 104 | c = splitter * cdy;
|
|---|
| 105 | bhi = c - (c - cdy);
|
|---|
| 106 | blo = cdy - bhi;
|
|---|
| 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;
|
|---|
| 115 | bvirt = _0 - _i;
|
|---|
| 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;
|
|---|
| 122 | c = splitter * adx;
|
|---|
| 123 | ahi = c - (c - adx);
|
|---|
| 124 | alo = adx - ahi;
|
|---|
| 125 | c = splitter * bdy;
|
|---|
| 126 | bhi = c - (c - bdy);
|
|---|
| 127 | blo = bdy - bhi;
|
|---|
| 128 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 129 | t1 = bdx * ady;
|
|---|
| 130 | c = splitter * bdx;
|
|---|
| 131 | ahi = c - (c - bdx);
|
|---|
| 132 | alo = bdx - ahi;
|
|---|
| 133 | c = splitter * ady;
|
|---|
| 134 | bhi = c - (c - ady);
|
|---|
| 135 | blo = ady - bhi;
|
|---|
| 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;
|
|---|
| 144 | bvirt = _0 - _i;
|
|---|
| 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);
|
|---|
| 164 | let errbound = iccerrboundB * permanent;
|
|---|
| 165 | if (det >= errbound || -det >= errbound) {
|
|---|
| 166 | return det;
|
|---|
| 167 | }
|
|---|
| 168 |
|
|---|
| 169 | bvirt = ax - adx;
|
|---|
| 170 | adxtail = ax - (adx + bvirt) + (bvirt - dx);
|
|---|
| 171 | bvirt = ay - ady;
|
|---|
| 172 | adytail = ay - (ady + bvirt) + (bvirt - dy);
|
|---|
| 173 | bvirt = bx - bdx;
|
|---|
| 174 | bdxtail = bx - (bdx + bvirt) + (bvirt - dx);
|
|---|
| 175 | bvirt = by - bdy;
|
|---|
| 176 | bdytail = by - (bdy + bvirt) + (bvirt - dy);
|
|---|
| 177 | bvirt = cx - cdx;
|
|---|
| 178 | cdxtail = cx - (cdx + bvirt) + (bvirt - dx);
|
|---|
| 179 | bvirt = cy - cdy;
|
|---|
| 180 | cdytail = cy - (cdy + bvirt) + (bvirt - dy);
|
|---|
| 181 | if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {
|
|---|
| 182 | return det;
|
|---|
| 183 | }
|
|---|
| 184 |
|
|---|
| 185 | errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);
|
|---|
| 186 | det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +
|
|---|
| 187 | 2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +
|
|---|
| 188 | ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +
|
|---|
| 189 | 2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +
|
|---|
| 190 | ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +
|
|---|
| 191 | 2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));
|
|---|
| 192 |
|
|---|
| 193 | if (det >= errbound || -det >= errbound) {
|
|---|
| 194 | return det;
|
|---|
| 195 | }
|
|---|
| 196 |
|
|---|
| 197 | if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
|
|---|
| 198 | s1 = adx * adx;
|
|---|
| 199 | c = splitter * adx;
|
|---|
| 200 | ahi = c - (c - adx);
|
|---|
| 201 | alo = adx - ahi;
|
|---|
| 202 | s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
|
|---|
| 203 | t1 = ady * ady;
|
|---|
| 204 | c = splitter * ady;
|
|---|
| 205 | ahi = c - (c - ady);
|
|---|
| 206 | alo = ady - ahi;
|
|---|
| 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;
|
|---|
| 215 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 221 | }
|
|---|
| 222 | if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
|
|---|
| 223 | s1 = bdx * bdx;
|
|---|
| 224 | c = splitter * bdx;
|
|---|
| 225 | ahi = c - (c - bdx);
|
|---|
| 226 | alo = bdx - ahi;
|
|---|
| 227 | s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
|
|---|
| 228 | t1 = bdy * bdy;
|
|---|
| 229 | c = splitter * bdy;
|
|---|
| 230 | ahi = c - (c - bdy);
|
|---|
| 231 | alo = bdy - ahi;
|
|---|
| 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;
|
|---|
| 240 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 246 | }
|
|---|
| 247 | if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
|
|---|
| 248 | s1 = cdx * cdx;
|
|---|
| 249 | c = splitter * cdx;
|
|---|
| 250 | ahi = c - (c - cdx);
|
|---|
| 251 | alo = cdx - ahi;
|
|---|
| 252 | s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
|
|---|
| 253 | t1 = cdy * cdy;
|
|---|
| 254 | c = splitter * cdy;
|
|---|
| 255 | ahi = c - (c - cdy);
|
|---|
| 256 | alo = cdy - ahi;
|
|---|
| 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;
|
|---|
| 265 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 271 | }
|
|---|
| 272 |
|
|---|
| 273 | if (adxtail !== 0) {
|
|---|
| 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);
|
|---|
| 279 | }
|
|---|
| 280 | if (adytail !== 0) {
|
|---|
| 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);
|
|---|
| 286 | }
|
|---|
| 287 | if (bdxtail !== 0) {
|
|---|
| 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);
|
|---|
| 293 | }
|
|---|
| 294 | if (bdytail !== 0) {
|
|---|
| 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);
|
|---|
| 300 | }
|
|---|
| 301 | if (cdxtail !== 0) {
|
|---|
| 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);
|
|---|
| 307 | }
|
|---|
| 308 | if (cdytail !== 0) {
|
|---|
| 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);
|
|---|
| 314 | }
|
|---|
| 315 |
|
|---|
| 316 | if (adxtail !== 0 || adytail !== 0) {
|
|---|
| 317 | if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
|
|---|
| 318 | s1 = bdxtail * cdy;
|
|---|
| 319 | c = splitter * bdxtail;
|
|---|
| 320 | ahi = c - (c - bdxtail);
|
|---|
| 321 | alo = bdxtail - ahi;
|
|---|
| 322 | c = splitter * cdy;
|
|---|
| 323 | bhi = c - (c - cdy);
|
|---|
| 324 | blo = cdy - bhi;
|
|---|
| 325 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 326 | t1 = bdx * cdytail;
|
|---|
| 327 | c = splitter * bdx;
|
|---|
| 328 | ahi = c - (c - bdx);
|
|---|
| 329 | alo = bdx - ahi;
|
|---|
| 330 | c = splitter * cdytail;
|
|---|
| 331 | bhi = c - (c - cdytail);
|
|---|
| 332 | blo = cdytail - bhi;
|
|---|
| 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;
|
|---|
| 341 | bvirt = _i - _0;
|
|---|
| 342 | u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
|
|---|
| 343 | u3 = _j + _i;
|
|---|
| 344 | bvirt = u3 - _j;
|
|---|
| 345 | u[2] = _j - (u3 - bvirt) + (_i - bvirt);
|
|---|
| 346 | u[3] = u3;
|
|---|
| 347 | s1 = cdxtail * -bdy;
|
|---|
| 348 | c = splitter * cdxtail;
|
|---|
| 349 | ahi = c - (c - cdxtail);
|
|---|
| 350 | alo = cdxtail - ahi;
|
|---|
| 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;
|
|---|
| 356 | c = splitter * cdx;
|
|---|
| 357 | ahi = c - (c - cdx);
|
|---|
| 358 | alo = cdx - ahi;
|
|---|
| 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;
|
|---|
| 370 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 378 | c = splitter * bdxtail;
|
|---|
| 379 | ahi = c - (c - bdxtail);
|
|---|
| 380 | alo = bdxtail - ahi;
|
|---|
| 381 | c = splitter * cdytail;
|
|---|
| 382 | bhi = c - (c - cdytail);
|
|---|
| 383 | blo = cdytail - bhi;
|
|---|
| 384 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 385 | t1 = cdxtail * bdytail;
|
|---|
| 386 | c = splitter * cdxtail;
|
|---|
| 387 | ahi = c - (c - cdxtail);
|
|---|
| 388 | alo = cdxtail - ahi;
|
|---|
| 389 | c = splitter * bdytail;
|
|---|
| 390 | bhi = c - (c - bdytail);
|
|---|
| 391 | blo = bdytail - bhi;
|
|---|
| 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;
|
|---|
| 400 | bvirt = _0 - _i;
|
|---|
| 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;
|
|---|
| 406 | bcttlen = 4;
|
|---|
| 407 | } else {
|
|---|
| 408 | bct[0] = 0;
|
|---|
| 409 | bctlen = 1;
|
|---|
| 410 | bctt[0] = 0;
|
|---|
| 411 | bcttlen = 1;
|
|---|
| 412 | }
|
|---|
| 413 | if (adxtail !== 0) {
|
|---|
| 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);
|
|---|
| 424 |
|
|---|
| 425 | if (bdytail !== 0) {
|
|---|
| 426 | finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);
|
|---|
| 427 | }
|
|---|
| 428 | if (cdytail !== 0) {
|
|---|
| 429 | finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);
|
|---|
| 430 | }
|
|---|
| 431 | }
|
|---|
| 432 | if (adytail !== 0) {
|
|---|
| 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);
|
|---|
| 443 | }
|
|---|
| 444 | }
|
|---|
| 445 | if (bdxtail !== 0 || bdytail !== 0) {
|
|---|
| 446 | if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
|
|---|
| 447 | s1 = cdxtail * ady;
|
|---|
| 448 | c = splitter * cdxtail;
|
|---|
| 449 | ahi = c - (c - cdxtail);
|
|---|
| 450 | alo = cdxtail - ahi;
|
|---|
| 451 | c = splitter * ady;
|
|---|
| 452 | bhi = c - (c - ady);
|
|---|
| 453 | blo = ady - bhi;
|
|---|
| 454 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 455 | t1 = cdx * adytail;
|
|---|
| 456 | c = splitter * cdx;
|
|---|
| 457 | ahi = c - (c - cdx);
|
|---|
| 458 | alo = cdx - ahi;
|
|---|
| 459 | c = splitter * adytail;
|
|---|
| 460 | bhi = c - (c - adytail);
|
|---|
| 461 | blo = adytail - bhi;
|
|---|
| 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;
|
|---|
| 470 | bvirt = _i - _0;
|
|---|
| 471 | u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
|
|---|
| 472 | u3 = _j + _i;
|
|---|
| 473 | bvirt = u3 - _j;
|
|---|
| 474 | u[2] = _j - (u3 - bvirt) + (_i - bvirt);
|
|---|
| 475 | u[3] = u3;
|
|---|
| 476 | n1 = -cdy;
|
|---|
| 477 | n0 = -cdytail;
|
|---|
| 478 | s1 = adxtail * n1;
|
|---|
| 479 | c = splitter * adxtail;
|
|---|
| 480 | ahi = c - (c - adxtail);
|
|---|
| 481 | alo = adxtail - ahi;
|
|---|
| 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;
|
|---|
| 487 | c = splitter * adx;
|
|---|
| 488 | ahi = c - (c - adx);
|
|---|
| 489 | alo = adx - ahi;
|
|---|
| 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;
|
|---|
| 501 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 509 | c = splitter * cdxtail;
|
|---|
| 510 | ahi = c - (c - cdxtail);
|
|---|
| 511 | alo = cdxtail - ahi;
|
|---|
| 512 | c = splitter * adytail;
|
|---|
| 513 | bhi = c - (c - adytail);
|
|---|
| 514 | blo = adytail - bhi;
|
|---|
| 515 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 516 | t1 = adxtail * cdytail;
|
|---|
| 517 | c = splitter * adxtail;
|
|---|
| 518 | ahi = c - (c - adxtail);
|
|---|
| 519 | alo = adxtail - ahi;
|
|---|
| 520 | c = splitter * cdytail;
|
|---|
| 521 | bhi = c - (c - cdytail);
|
|---|
| 522 | blo = cdytail - bhi;
|
|---|
| 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;
|
|---|
| 531 | bvirt = _0 - _i;
|
|---|
| 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;
|
|---|
| 537 | cattlen = 4;
|
|---|
| 538 | } else {
|
|---|
| 539 | cat[0] = 0;
|
|---|
| 540 | catlen = 1;
|
|---|
| 541 | catt[0] = 0;
|
|---|
| 542 | cattlen = 1;
|
|---|
| 543 | }
|
|---|
| 544 | if (bdxtail !== 0) {
|
|---|
| 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 |
|
|---|
| 556 | if (cdytail !== 0) {
|
|---|
| 557 | finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);
|
|---|
| 558 | }
|
|---|
| 559 | if (adytail !== 0) {
|
|---|
| 560 | finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);
|
|---|
| 561 | }
|
|---|
| 562 | }
|
|---|
| 563 | if (bdytail !== 0) {
|
|---|
| 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);
|
|---|
| 574 | }
|
|---|
| 575 | }
|
|---|
| 576 | if (cdxtail !== 0 || cdytail !== 0) {
|
|---|
| 577 | if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
|
|---|
| 578 | s1 = adxtail * bdy;
|
|---|
| 579 | c = splitter * adxtail;
|
|---|
| 580 | ahi = c - (c - adxtail);
|
|---|
| 581 | alo = adxtail - ahi;
|
|---|
| 582 | c = splitter * bdy;
|
|---|
| 583 | bhi = c - (c - bdy);
|
|---|
| 584 | blo = bdy - bhi;
|
|---|
| 585 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 586 | t1 = adx * bdytail;
|
|---|
| 587 | c = splitter * adx;
|
|---|
| 588 | ahi = c - (c - adx);
|
|---|
| 589 | alo = adx - ahi;
|
|---|
| 590 | c = splitter * bdytail;
|
|---|
| 591 | bhi = c - (c - bdytail);
|
|---|
| 592 | blo = bdytail - bhi;
|
|---|
| 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;
|
|---|
| 601 | bvirt = _i - _0;
|
|---|
| 602 | u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
|
|---|
| 603 | u3 = _j + _i;
|
|---|
| 604 | bvirt = u3 - _j;
|
|---|
| 605 | u[2] = _j - (u3 - bvirt) + (_i - bvirt);
|
|---|
| 606 | u[3] = u3;
|
|---|
| 607 | n1 = -ady;
|
|---|
| 608 | n0 = -adytail;
|
|---|
| 609 | s1 = bdxtail * n1;
|
|---|
| 610 | c = splitter * bdxtail;
|
|---|
| 611 | ahi = c - (c - bdxtail);
|
|---|
| 612 | alo = bdxtail - ahi;
|
|---|
| 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;
|
|---|
| 618 | c = splitter * bdx;
|
|---|
| 619 | ahi = c - (c - bdx);
|
|---|
| 620 | alo = bdx - ahi;
|
|---|
| 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;
|
|---|
| 632 | bvirt = _i - _0;
|
|---|
| 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;
|
|---|
| 640 | c = splitter * adxtail;
|
|---|
| 641 | ahi = c - (c - adxtail);
|
|---|
| 642 | alo = adxtail - ahi;
|
|---|
| 643 | c = splitter * bdytail;
|
|---|
| 644 | bhi = c - (c - bdytail);
|
|---|
| 645 | blo = bdytail - bhi;
|
|---|
| 646 | s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
|
|---|
| 647 | t1 = bdxtail * adytail;
|
|---|
| 648 | c = splitter * bdxtail;
|
|---|
| 649 | ahi = c - (c - bdxtail);
|
|---|
| 650 | alo = bdxtail - ahi;
|
|---|
| 651 | c = splitter * adytail;
|
|---|
| 652 | bhi = c - (c - adytail);
|
|---|
| 653 | blo = adytail - bhi;
|
|---|
| 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;
|
|---|
| 662 | bvirt = _0 - _i;
|
|---|
| 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;
|
|---|
| 668 | abttlen = 4;
|
|---|
| 669 | } else {
|
|---|
| 670 | abt[0] = 0;
|
|---|
| 671 | abtlen = 1;
|
|---|
| 672 | abtt[0] = 0;
|
|---|
| 673 | abttlen = 1;
|
|---|
| 674 | }
|
|---|
| 675 | if (cdxtail !== 0) {
|
|---|
| 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 |
|
|---|
| 687 | if (adytail !== 0) {
|
|---|
| 688 | finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);
|
|---|
| 689 | }
|
|---|
| 690 | if (bdytail !== 0) {
|
|---|
| 691 | finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);
|
|---|
| 692 | }
|
|---|
| 693 | }
|
|---|
| 694 | if (cdytail !== 0) {
|
|---|
| 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);
|
|---|
| 705 | }
|
|---|
| 706 | }
|
|---|
| 707 |
|
|---|
| 708 | return fin[finlen - 1];
|
|---|
| 709 | }
|
|---|
| 710 |
|
|---|
| 711 | export function incircle(ax, ay, bx, by, cx, cy, dx, dy) {
|
|---|
| 712 | const adx = ax - dx;
|
|---|
| 713 | const bdx = bx - dx;
|
|---|
| 714 | const cdx = cx - dx;
|
|---|
| 715 | const ady = ay - dy;
|
|---|
| 716 | const bdy = by - dy;
|
|---|
| 717 | const cdy = cy - dy;
|
|---|
| 718 |
|
|---|
| 719 | const bdxcdy = bdx * cdy;
|
|---|
| 720 | const cdxbdy = cdx * bdy;
|
|---|
| 721 | const alift = adx * adx + ady * ady;
|
|---|
| 722 |
|
|---|
| 723 | const cdxady = cdx * ady;
|
|---|
| 724 | const adxcdy = adx * cdy;
|
|---|
| 725 | const blift = bdx * bdx + bdy * bdy;
|
|---|
| 726 |
|
|---|
| 727 | const adxbdy = adx * bdy;
|
|---|
| 728 | const bdxady = bdx * ady;
|
|---|
| 729 | const clift = cdx * cdx + cdy * cdy;
|
|---|
| 730 |
|
|---|
| 731 | const det =
|
|---|
| 732 | alift * (bdxcdy - cdxbdy) +
|
|---|
| 733 | blift * (cdxady - adxcdy) +
|
|---|
| 734 | clift * (adxbdy - bdxady);
|
|---|
| 735 |
|
|---|
| 736 | const permanent =
|
|---|
| 737 | (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +
|
|---|
| 738 | (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +
|
|---|
| 739 | (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;
|
|---|
| 740 |
|
|---|
| 741 | const errbound = iccerrboundA * permanent;
|
|---|
| 742 |
|
|---|
| 743 | if (det > errbound || -det > errbound) {
|
|---|
| 744 | return det;
|
|---|
| 745 | }
|
|---|
| 746 | return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);
|
|---|
| 747 | }
|
|---|
| 748 |
|
|---|
| 749 | export function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {
|
|---|
| 750 | const adx = ax - dx;
|
|---|
| 751 | const ady = ay - dy;
|
|---|
| 752 | const bdx = bx - dx;
|
|---|
| 753 | const bdy = by - dy;
|
|---|
| 754 | const cdx = cx - dx;
|
|---|
| 755 | const cdy = cy - dy;
|
|---|
| 756 |
|
|---|
| 757 | const abdet = adx * bdy - bdx * ady;
|
|---|
| 758 | const bcdet = bdx * cdy - cdx * bdy;
|
|---|
| 759 | const cadet = cdx * ady - adx * cdy;
|
|---|
| 760 | const alift = adx * adx + ady * ady;
|
|---|
| 761 | const blift = bdx * bdx + bdy * bdy;
|
|---|
| 762 | const clift = cdx * cdx + cdy * cdy;
|
|---|
| 763 |
|
|---|
| 764 | return alift * bcdet + blift * cadet + clift * abdet;
|
|---|
| 765 | }
|
|---|