@escapace/minimum-perimeter-triangle 0.2.4 → 0.2.6

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/LICENSE CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  Mozilla Public License Version 2.0
2
3
  ==================================
3
4
 
@@ -357,7 +358,7 @@ Exhibit A - Source Code Form License Notice
357
358
 
358
359
  This Source Code Form is subject to the terms of the Mozilla Public
359
360
  License, v. 2.0. If a copy of the MPL was not distributed with this
360
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
361
+ file, You can obtain one at https://mozilla.org/MPL/2.0/.
361
362
 
362
363
  If it is not possible or desirable to put the notice in a particular
363
364
  file, then You may include the notice in a location (such as a LICENSE
@@ -0,0 +1,557 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+
5
+ // src/line.ts
6
+ var Line = class {
7
+ constructor(start, end) {
8
+ __publicField(this, "delta");
9
+ __publicField(this, "end");
10
+ __publicField(this, "start");
11
+ this.start = start;
12
+ this.end = end;
13
+ this.delta = end.minus(start);
14
+ }
15
+ closestPoint(p) {
16
+ return this.evaluate(this.closestPointParam(p));
17
+ }
18
+ closestPointParam(p) {
19
+ return this.delta.dot(p.minus(this.start)) / this.delta.normSquared;
20
+ }
21
+ distanceToPoint(p) {
22
+ return Math.abs(p.cross(this.delta) - this.start.cross(this.end)) / this.delta.norm;
23
+ }
24
+ evaluate(t) {
25
+ return this.start.plus(this.delta.times(t));
26
+ }
27
+ intersectionParameter(that, error) {
28
+ const d = this.delta.cross(that.delta);
29
+ if (d === 0 || Math.abs(d) < error) {
30
+ return null;
31
+ }
32
+ const dStart = this.start.minus(that.start);
33
+ return that.delta.cross(dStart) / d;
34
+ }
35
+ intersectionPoint(that, error) {
36
+ const t = this.intersectionParameter(that, error);
37
+ return t === null ? null : this.evaluate(t);
38
+ }
39
+ overlaps(that, error) {
40
+ return this.pointOnTop(that.start, error) && this.pointOnTop(that.end, error);
41
+ }
42
+ /**
43
+ * If alpha is less than deviationFromZeroAngle, the 2 lines are
44
+ * considered parallel.
45
+ * _______________________________
46
+ * alpha (/
47
+ * /
48
+ * /
49
+ * /
50
+ */
51
+ parallel(that, deviationFromZeroAngle) {
52
+ const d = Math.abs(this.delta.cross(that.delta));
53
+ return d === 0 || d < this.length * this.length * Math.sin(deviationFromZeroAngle);
54
+ }
55
+ pointOnSide(p, error = 0) {
56
+ const number_ = this.start.cross(this.end) - p.cross(this.delta);
57
+ if (number_ === 0 || Math.abs(number_) / this.delta.norm < error) {
58
+ return 0 /* Top */;
59
+ }
60
+ return number_ > 0 ? 1 /* Left */ : -1 /* Right */;
61
+ }
62
+ pointOnTop(p, error) {
63
+ return this.pointOnSide(p, error) === 0 /* Top */;
64
+ }
65
+ /**
66
+ * Length of a line is the length between its two defining points
67
+ */
68
+ get length() {
69
+ return this.delta.norm;
70
+ }
71
+ };
72
+
73
+ // src/vec2.ts
74
+ var Vec2 = class _Vec2 {
75
+ constructor(x, y) {
76
+ __publicField(this, "_norm");
77
+ __publicField(this, "_normalized");
78
+ __publicField(this, "_normSquared");
79
+ __publicField(this, "_x");
80
+ __publicField(this, "_y");
81
+ this._x = x;
82
+ this._y = y;
83
+ }
84
+ cross(that) {
85
+ return this._x * that._y - this._y * that._x;
86
+ }
87
+ dot(that) {
88
+ return this._x * that._x + this._y * that._y;
89
+ }
90
+ equals(that, error) {
91
+ if (error === 0) {
92
+ return this.x === that.x && this.y === that.y;
93
+ }
94
+ return this.minus(that).normSquared < error * error;
95
+ }
96
+ minus(that) {
97
+ return new _Vec2(this._x - that._x, this._y - that._y);
98
+ }
99
+ normal() {
100
+ return new _Vec2(this._y, -this._x);
101
+ }
102
+ over(s) {
103
+ return new _Vec2(this._x / s, this._y / s);
104
+ }
105
+ plus(that) {
106
+ return new _Vec2(this._x + that._x, this._y + that._y);
107
+ }
108
+ times(s) {
109
+ return new _Vec2(this._x * s, this._y * s);
110
+ }
111
+ toString() {
112
+ return `(${this.x}, ${this.y})`;
113
+ }
114
+ get norm() {
115
+ return this._norm === void 0 ? this._norm = Math.sqrt(this.normSquared) : this._norm;
116
+ }
117
+ get normalized() {
118
+ return this._normalized === void 0 ? this._normalized = this.over(this.norm) : this._normalized;
119
+ }
120
+ get normSquared() {
121
+ return this._normSquared === void 0 ? this._normSquared = this.dot(this) : this._normSquared;
122
+ }
123
+ get x() {
124
+ return this._x;
125
+ }
126
+ get y() {
127
+ return this._y;
128
+ }
129
+ };
130
+
131
+ // src/inscribe.ts
132
+ var Wedge = class _Wedge {
133
+ constructor(leftArm, rightArm, isDegenerate = false) {
134
+ __publicField(this, "isDegenerate");
135
+ __publicField(this, "leftArm");
136
+ __publicField(this, "rightArm");
137
+ this.leftArm = leftArm;
138
+ this.rightArm = rightArm;
139
+ this.isDegenerate = isDegenerate;
140
+ }
141
+ static new(leftArm, rightArm, error) {
142
+ if (leftArm === null || rightArm === null) {
143
+ return null;
144
+ }
145
+ if (error !== 0 && leftArm.overlaps(rightArm, error)) {
146
+ return null;
147
+ }
148
+ const deviationFromZeroAngle = 0.1 / (leftArm.length * rightArm.length);
149
+ if (leftArm.parallel(rightArm, deviationFromZeroAngle)) {
150
+ const middle = new Line(leftArm.evaluate(0.5), rightArm.evaluate(0.5));
151
+ const p = middle.evaluate(0.5);
152
+ const sideLeft = leftArm.pointOnSide(p, error);
153
+ const sideRight = rightArm.pointOnSide(p, error);
154
+ if (sideLeft === 0 /* Top */ || sideRight === 0 /* Top */) {
155
+ throw new Error();
156
+ }
157
+ return sideLeft !== sideRight ? new _Wedge(leftArm, rightArm, true) : new _Wedge(leftArm, new Line(rightArm.end, rightArm.start));
158
+ }
159
+ const tLA = leftArm.intersectionParameter(rightArm, 0);
160
+ const tRA = rightArm.intersectionParameter(leftArm, 0);
161
+ if (tLA === 0.5 || tRA === 0.5) {
162
+ return null;
163
+ }
164
+ const W = leftArm.evaluate(tLA);
165
+ const eLA = tLA < 1 - tLA ? leftArm.end : leftArm.start;
166
+ const eRA = tRA < 1 - tRA ? rightArm.end : rightArm.start;
167
+ return new _Wedge(new Line(W, eLA), new Line(W, eRA));
168
+ }
169
+ fit_Dl(l, error) {
170
+ if (!this.formTriangle(l, error)) {
171
+ return null;
172
+ }
173
+ const A = l.intersectionPoint(this.rightArm, 0);
174
+ const B = l.intersectionPoint(this.leftArm, 0);
175
+ const AB = new Line(A, B);
176
+ const Ap = this.leftArm.closestPoint(A);
177
+ const I = A.plus(Ap).over(2);
178
+ const r = A.minus(Ap).norm / 2;
179
+ const t1 = (AB.delta.cross(A.minus(I)) + r * AB.delta.norm) / AB.delta.cross(this.rightArm.delta);
180
+ const t2 = (AB.delta.cross(A.minus(I)) - r * AB.delta.norm) / AB.delta.cross(this.rightArm.delta);
181
+ const o1 = this.rightArm.delta.times(t1).plus(I);
182
+ const o2 = this.rightArm.delta.times(t2).plus(I);
183
+ return [
184
+ {
185
+ circle: { centre: o1, r },
186
+ tangentParameter: l.closestPointParam(o1)
187
+ },
188
+ {
189
+ circle: { centre: o2, r },
190
+ tangentParameter: l.closestPointParam(o2)
191
+ }
192
+ ];
193
+ }
194
+ fit_Dp(p, error) {
195
+ if (!this.strictlyContains(p, error)) {
196
+ return null;
197
+ }
198
+ const A = this.rightArm.closestPoint(p);
199
+ const Ap = this.leftArm.closestPoint(A);
200
+ const I = A.plus(Ap).over(2);
201
+ const r = A.minus(Ap).norm / 2;
202
+ const a = this.rightArm.delta.normSquared;
203
+ const b = I.minus(p).dot(this.rightArm.delta) * 2;
204
+ const c = I.minus(p).normSquared - r * r;
205
+ const discriminant = b * b - 4 * a * c;
206
+ if (discriminant < (-10) ** -5) {
207
+ return null;
208
+ }
209
+ const t = [];
210
+ if (Math.abs(discriminant) < 10 ** -5) {
211
+ t.push(-b / (2 * a));
212
+ } else {
213
+ t.push((-b + Math.sqrt(discriminant)) / (2 * a));
214
+ t.push((-b - Math.sqrt(discriminant)) / (2 * a));
215
+ }
216
+ const result = [];
217
+ t.forEach((t0) => {
218
+ const O = this.rightArm.delta.times(t0).plus(I);
219
+ result.push({
220
+ circle: { centre: O, r },
221
+ tangent: new Line(p, p.plus(O.minus(p).normal()))
222
+ });
223
+ });
224
+ return result;
225
+ }
226
+ fit_NDl(l, error) {
227
+ if (!this.formTriangle(l, error)) {
228
+ return null;
229
+ }
230
+ const C = this.leftArm.start;
231
+ const A = l.intersectionPoint(this.leftArm, 0);
232
+ const B = l.intersectionPoint(this.rightArm, 0);
233
+ const AC = new Line(A, C);
234
+ const BC = new Line(B, C);
235
+ const AB = new Line(A, B);
236
+ const a = AC.length;
237
+ const b = BC.length;
238
+ const c = AB.length;
239
+ const s = (a + b + c) / 2;
240
+ if (s * (s - a) * (s - b) / (s - c) < 0) {
241
+ return null;
242
+ }
243
+ const r = Math.sqrt(s * (s - a) * (s - b) / (s - c));
244
+ const det = AB.delta.cross(AC.delta);
245
+ const lhsAll = [
246
+ new Vec2(B.cross(A) + r * c, C.cross(A) + r * a),
247
+ new Vec2(B.cross(A) + r * c, C.cross(A) - r * a),
248
+ new Vec2(B.cross(A) - r * c, C.cross(A) + r * a),
249
+ new Vec2(B.cross(A) - r * c, C.cross(A) - r * a)
250
+ ];
251
+ const OAll = [];
252
+ lhsAll.forEach((lhs) => {
253
+ OAll.push(
254
+ new Vec2(
255
+ new Vec2(AB.delta.x, AC.delta.x).cross(lhs),
256
+ new Vec2(AB.delta.y, AC.delta.y).cross(lhs)
257
+ ).over(-det)
258
+ );
259
+ });
260
+ let o = null;
261
+ const dists = [];
262
+ for (const O of OAll) {
263
+ dists.push({
264
+ norm: Math.abs(BC.distanceToPoint(O) / r - 1),
265
+ raw: Math.abs(BC.distanceToPoint(O) - r)
266
+ });
267
+ const absoluteError = Math.abs(BC.distanceToPoint(O) - r);
268
+ const relativeError = Math.abs(BC.distanceToPoint(O) / r - 1);
269
+ if ((absoluteError < 10 ** -5 || relativeError < 10 ** -5) && AC.pointOnSide(O) !== BC.pointOnSide(O)) {
270
+ o = O;
271
+ break;
272
+ }
273
+ }
274
+ let message = "";
275
+ if (o === null) {
276
+ message = "fit_NDl, centre is undefined";
277
+ for (let index = 0; index < OAll.length; index++) {
278
+ message += `centre: (${OAll[index].x}, ${OAll[index].y}), r: ${r}, dist raw: ${dists[index].raw}, dist norm: ${dists[index].norm}
279
+ `;
280
+ }
281
+ }
282
+ if (o === null) {
283
+ throw new Error(message);
284
+ }
285
+ return [
286
+ {
287
+ circle: { centre: o, r },
288
+ tangentParameter: l.closestPointParam(o)
289
+ }
290
+ ];
291
+ }
292
+ // While fitting circles into a wedge
293
+ // There are four distinct cases:
294
+ // 1. Wedge is degenerate and additional element is a point
295
+ // 2. Wedge is degenerate and additional element is a line
296
+ // 3. Wedge is non-degenerate and additional element is a point
297
+ // 4. Wedge is non-degenerate and additional element is a line
298
+ // according to these assumptions, the following methods are named
299
+ fit_NDp(p, error) {
300
+ if (!this.strictlyContains(p, error)) {
301
+ return null;
302
+ }
303
+ const C = this.leftArm.start;
304
+ const A = this.leftArm.end;
305
+ const B = this.rightArm.end;
306
+ const a = C.minus(B).norm;
307
+ const b = C.minus(A).norm;
308
+ const D = A.minus(B).times(a / (a + b)).plus(B);
309
+ const bisector = new Line(C, D);
310
+ const eA = D.minus(C).normSquared - (A.minus(C).cross(D.minus(C)) / b) ** 2;
311
+ const eB = D.minus(C).dot(C.minus(p)) * 2;
312
+ const eC = C.minus(p).normSquared;
313
+ const discriminant = eB * eB - 4 * eA * eC;
314
+ if (discriminant < (-10) ** -5) {
315
+ return null;
316
+ }
317
+ let O, r;
318
+ if (Math.abs(discriminant) < 10 ** -5) {
319
+ const t = -eB / (2 * eA);
320
+ O = bisector.evaluate(t);
321
+ r = O.minus(p).norm;
322
+ } else {
323
+ const t1 = (-eB + Math.sqrt(discriminant)) / (2 * eA);
324
+ const t2 = (-eB - Math.sqrt(discriminant)) / (2 * eA);
325
+ if (bisector.evaluate(t1).minus(p).normSquared > bisector.evaluate(t2).minus(p).normSquared) {
326
+ O = bisector.evaluate(t1);
327
+ r = bisector.evaluate(t1).minus(p).norm;
328
+ } else {
329
+ O = bisector.evaluate(t2);
330
+ r = bisector.evaluate(t2).minus(p).norm;
331
+ }
332
+ }
333
+ return [
334
+ {
335
+ circle: { centre: O, r },
336
+ tangent: new Line(p, p.plus(O.minus(p).normal()))
337
+ }
338
+ ];
339
+ }
340
+ fitCircles(element, error) {
341
+ if (element instanceof Vec2) {
342
+ return this.isDegenerate ? this.fit_Dp(element, error) : this.fit_NDp(element, error);
343
+ }
344
+ if (element instanceof Line) {
345
+ return this.isDegenerate ? this.fit_Dl(element instanceof Line ? element : element, error) : this.fit_NDl(element instanceof Line ? element : element, error);
346
+ }
347
+ return null;
348
+ }
349
+ formTriangle(line, error) {
350
+ const thin = this.leftArm.parallel(line, 0.1 / (this.leftArm.length * line.length)) || this.rightArm.parallel(line, 0.1 / (this.rightArm.length * line.length));
351
+ if (thin) {
352
+ return false;
353
+ }
354
+ const A = line.intersectionPoint(this.leftArm, 0);
355
+ const B = line.intersectionPoint(this.rightArm, 0);
356
+ if (this.isDegenerate) {
357
+ return !A.equals(B, error);
358
+ }
359
+ const C = this.leftArm.intersectionPoint(this.rightArm, 0);
360
+ return !C.equals(A, error) && !C.equals(B, error) && !A.equals(B, error) && !new Line(A, B).pointOnTop(C, error);
361
+ }
362
+ looselyContains(p, error) {
363
+ const pLeft = this.leftArm.pointOnSide(p, error);
364
+ const pRight = this.rightArm.pointOnSide(p, error);
365
+ if (pLeft === 0 /* Top */ || pRight === 0 /* Top */) {
366
+ return true;
367
+ }
368
+ if (pLeft === pRight) {
369
+ return false;
370
+ }
371
+ return this.isDegenerate ? (
372
+ // degenerate + different sides => true
373
+ true
374
+ ) : (
375
+ // 2. (Because the arms intersect)
376
+ // Projection params of the point onto the arms must be larger than 0
377
+ this.leftArm.closestPointParam(p) >= 0 && this.rightArm.closestPointParam(p) >= 0
378
+ );
379
+ }
380
+ strictlyContains(p, error) {
381
+ const pLeft = this.leftArm.pointOnSide(p, error);
382
+ const pRight = this.rightArm.pointOnSide(p, error);
383
+ if (pLeft === 0 /* Top */ || pRight === 0 /* Top */) {
384
+ return false;
385
+ }
386
+ if (pLeft === pRight) {
387
+ return false;
388
+ }
389
+ return this.isDegenerate ? (
390
+ // degenerate + different sides => true
391
+ true
392
+ ) : (
393
+ // 2. (Because the arms intersect)
394
+ // Projection params of the point onto the arms must be larger than 0
395
+ this.leftArm.closestPointParam(p) >= 0 && this.rightArm.closestPointParam(p) >= 0
396
+ );
397
+ }
398
+ toString() {
399
+ return `LA: ${this.leftArm.start.toString()} --> ${this.leftArm.end.toString()}
400
+ RA: ${this.rightArm.start.toString()} --> ${this.rightArm.end.toString()}`;
401
+ }
402
+ };
403
+
404
+ // src/index.ts
405
+ function lineTangentToHull(line, points, halo) {
406
+ let holds = true;
407
+ let side = 0 /* Top */;
408
+ let k = 0;
409
+ while (side === 0 /* Top */ && k < points.length) {
410
+ side = line.pointOnSide(points[k], halo);
411
+ k++;
412
+ }
413
+ for (let index = k; index < points.length; index++) {
414
+ const testSide = line.pointOnSide(points[index], halo);
415
+ if (testSide === 0 /* Top */) {
416
+ continue;
417
+ }
418
+ if (testSide !== side) {
419
+ holds = false;
420
+ break;
421
+ }
422
+ }
423
+ return { holds, side };
424
+ }
425
+ function findEnclosingSide(wedge, startVertex, endVertex, points, halo) {
426
+ let side = null;
427
+ let stopVertex = startVertex;
428
+ let vertex = startVertex;
429
+ while (side === null && vertex > endVertex) {
430
+ const p1 = points[vertex];
431
+ const p2 = points[vertex - 1];
432
+ const edge = new Line(p1, p2);
433
+ const circlesEdge = wedge.fitCircles(edge, halo);
434
+ if (circlesEdge !== null) {
435
+ let tangentParameter = 100;
436
+ if (wedge.isDegenerate) {
437
+ let sidedness = 0 /* Top */;
438
+ let k = 0;
439
+ while (sidedness === 0 /* Top */ && k < points.length) {
440
+ sidedness = edge.pointOnSide(points[k], halo);
441
+ k++;
442
+ }
443
+ tangentParameter = edge.pointOnSide(circlesEdge[0].circle.centre) !== sidedness ? circlesEdge[0].tangentParameter : circlesEdge[1].tangentParameter;
444
+ } else {
445
+ tangentParameter = circlesEdge[0].tangentParameter;
446
+ }
447
+ if (tangentParameter > 0 && tangentParameter < 1) {
448
+ const Y = edge.evaluate(tangentParameter);
449
+ const joint = wedge.leftArm.intersectionPoint(edge, halo);
450
+ side = new Line(joint, Y);
451
+ }
452
+ }
453
+ if (side === null) {
454
+ const circlesPoint = wedge.fitCircles(p2, halo);
455
+ if (circlesPoint !== null) {
456
+ let tangent;
457
+ if (wedge.isDegenerate) {
458
+ let sidedness = 0 /* Top */;
459
+ let k = 0;
460
+ while (sidedness === 0 /* Top */ && k < points.length) {
461
+ sidedness = circlesPoint[0].tangent.pointOnSide(points[k], halo);
462
+ k++;
463
+ }
464
+ tangent = circlesPoint[0].tangent.pointOnSide(circlesPoint[0].circle.centre, halo) !== sidedness ? circlesPoint[0].tangent : circlesPoint[1].tangent;
465
+ } else {
466
+ tangent = circlesPoint[0].tangent;
467
+ }
468
+ if (lineTangentToHull(tangent, points, halo).holds) {
469
+ const joint = wedge.leftArm.intersectionPoint(tangent, halo);
470
+ side = new Line(joint, p2);
471
+ }
472
+ }
473
+ }
474
+ stopVertex = vertex;
475
+ vertex--;
476
+ }
477
+ return side === null ? null : { side, stopVertex };
478
+ }
479
+ function findAntipode(points) {
480
+ let farthestIndex = 0;
481
+ let farthestDistribution = 0;
482
+ for (let index = 0, n = points.length; index < n; index++) {
483
+ const testDistribution = new Line(points[0], points[n - 1]).distanceToPoint(
484
+ points[index]
485
+ );
486
+ if (testDistribution > farthestDistribution) {
487
+ farthestDistribution = testDistribution;
488
+ farthestIndex = index;
489
+ }
490
+ }
491
+ return farthestIndex;
492
+ }
493
+ function minTriangleWithBase(convexHull, error, tol) {
494
+ let AB, AC;
495
+ const n = convexHull.length;
496
+ const BC = new Line(convexHull[0], convexHull[n - 1]);
497
+ const antipodIndex = findAntipode(convexHull);
498
+ const baseParallel = new Line(convexHull[antipodIndex], convexHull[antipodIndex].plus(BC.delta));
499
+ let wedge = Wedge.new(BC, baseParallel, error);
500
+ let Pn = n - 1;
501
+ let Qn = antipodIndex;
502
+ do {
503
+ const CQinfo = findEnclosingSide(wedge, Pn, antipodIndex, convexHull, error);
504
+ if (CQinfo === null) {
505
+ return null;
506
+ }
507
+ ({ side: AC, stopVertex: Pn } = CQinfo);
508
+ wedge = Wedge.new(wedge.leftArm, AC, error);
509
+ const BPinfo = findEnclosingSide(wedge, Qn, 0, convexHull, error);
510
+ if (BPinfo === null) {
511
+ return null;
512
+ }
513
+ ({ side: AB, stopVertex: Qn } = BPinfo);
514
+ wedge = Wedge.new(wedge.leftArm, AB, error);
515
+ } while (AB.length - AC.length > tol);
516
+ const A = AC.intersectionPoint(AB, 0);
517
+ const B = AB.start;
518
+ const C = AC.start;
519
+ return { A, B, C };
520
+ }
521
+ function minTriangle(convexHull, error, tol) {
522
+ if (convexHull.length < 3) {
523
+ return null;
524
+ }
525
+ if (convexHull.length === 3) {
526
+ return { A: convexHull[0], B: convexHull[1], C: convexHull[2] };
527
+ }
528
+ const points = convexHull.map((p) => new Vec2(p.x, p.y));
529
+ let A = null;
530
+ let B = null;
531
+ let C = null;
532
+ let perimeter = -1;
533
+ let rotations = 0;
534
+ while (rotations < points.length) {
535
+ if (rotations > 0) {
536
+ points.push(points.shift());
537
+ }
538
+ const triangle = minTriangleWithBase(points, error, tol);
539
+ if (triangle !== null) {
540
+ const { A: A1, B: B1, C: C1 } = triangle;
541
+ const perimeter1 = A1.minus(B1).norm + B1.minus(C1).norm + C1.minus(A1).norm;
542
+ if (perimeter1 < perimeter || perimeter === -1) {
543
+ [A, B, C] = [A1, B1, C1];
544
+ perimeter = perimeter1;
545
+ }
546
+ }
547
+ rotations++;
548
+ }
549
+ return perimeter === -1 ? null : {
550
+ A: { x: A.x, y: A.y },
551
+ B: { x: B.x, y: B.y },
552
+ C: { x: C.x, y: C.y }
553
+ };
554
+ }
555
+
556
+ export { lineTangentToHull, minTriangle, minTriangleWithBase };
557
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/line.ts","../../src/vec2.ts","../../src/inscribe.ts","../../src/index.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export declare function lineTangentToHull(line: Line, points: Vec2[], halo: numb
11
11
  * http://scholar.uwindsor.ca/cgi/viewcontent.cgi?article=2527&context=etd
12
12
  * starting from p. 22; In the notation of the generic algorithm BC is fixed
13
13
  */
14
- export declare function minTriangleWithBase(convexHull: Vec2[], err: number, tol: number): {
14
+ export declare function minTriangleWithBase(convexHull: Vec2[], error: number, tol: number): {
15
15
  A: Vec2;
16
16
  B: Vec2;
17
17
  C: Vec2;
@@ -19,7 +19,7 @@ export declare function minTriangleWithBase(convexHull: Vec2[], err: number, tol
19
19
  export declare function minTriangle(convexHull: Array<{
20
20
  x: number;
21
21
  y: number;
22
- }>, err: number, tol: number): {
22
+ }>, error: number, tol: number): {
23
23
  A: {
24
24
  x: number;
25
25
  y: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAQ,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EAAE,EACd,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAsBlC;AAgID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,IAAI,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAuDtC;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV;IACD,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5B,GAAG,IAAI,CAmDP"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAQ,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EAAE,EACd,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAsBlC;AA6HD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,IAAI,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAoDtC;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3C,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV;IACD,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5B,GAAG,IAAI,CAgDP"}