flo-mat 3.0.7 → 3.0.10
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/browser/index.js +215 -208
- package/browser/index.min.js +1 -1
- package/node/closest-boundary-point/cull-bezier-pieces.d.ts +5 -4
- package/node/closest-boundary-point/cull-bezier-pieces.js +9 -8
- package/node/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
- package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +2 -2
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js +8 -8
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
- package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +2 -2
- package/node/closest-boundary-point/cull-by-tight-boundary-box.js +8 -8
- package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
- package/node/closest-boundary-point/get-best-distance-squared.d.ts +1 -1
- package/node/closest-boundary-point/get-best-distance-squared.js +6 -6
- package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
- package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +2 -2
- package/node/closest-boundary-point/get-close-boundary-points-certified.js +7 -7
- package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
- package/node/cp-node/cp-node-fs.d.ts +11 -11
- package/node/cp-node/cp-node-fs.js +11 -11
- package/node/cp-node/cp-node.d.ts +15 -15
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.d.ts +1 -1
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +11 -16
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
- package/node/cp-node/fs/get-boundary-beziers-between.js +4 -6
- package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
- package/node/cp-node/fs/get-boundary-beziers-to-next.d.ts +10 -1
- package/node/cp-node/fs/get-boundary-beziers-to-next.js +70 -35
- package/node/cp-node/fs/get-boundary-beziers-to-next.js.map +1 -1
- package/node/cp-node/fs/get-salience.js +2 -2
- package/node/cp-node/fs/get-salience.js.map +1 -1
- package/node/cp-node/fs/get-speed.js +0 -1
- package/node/cp-node/fs/get-speed.js.map +1 -1
- package/node/find-2-prong/cull-bezier-pieces.d.ts +4 -4
- package/node/find-2-prong/cull-bezier-pieces.js +9 -9
- package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/find-2-prong.js +8 -8
- package/node/find-2-prong/find-2-prong.js.map +1 -1
- package/node/find-2-prong/get-initial-bezier-pieces.d.ts +2 -2
- package/node/find-2-prong/get-initial-bezier-pieces.js +2 -2
- package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/reduce-radius.d.ts +1 -1
- package/node/find-2-prong/reduce-radius.js +5 -5
- package/node/find-2-prong/reduce-radius.js.map +1 -1
- package/node/find-3-prong.ts/calc-better-x.d.ts +2 -2
- package/node/find-3-prong.ts/calc-better-x.js +3 -3
- package/node/find-3-prong.ts/calc-better-x.js.map +1 -1
- package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +2 -2
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js +3 -3
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +1 -1
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +2 -2
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.js +16 -16
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +1 -1
- package/node/find-3-prong.ts/find-3-prong.js +2 -2
- package/node/find-3-prong.ts/find-3-prong.js.map +1 -1
- package/node/find-3-prong.ts/get-closest-points.d.ts +2 -2
- package/node/find-3-prong.ts/get-closest-points.js +4 -4
- package/node/find-3-prong.ts/get-closest-points.js.map +1 -1
- package/node/find-mat/find-mat.js +4 -0
- package/node/find-mat/find-mat.js.map +1 -1
- package/node/find-mat/get-meta.js.map +1 -1
- package/node/index.d.ts +1 -0
- package/node/index.js +1 -1
- package/node/index.js.map +1 -1
- package/node/mat/get-boundary-piece-beziers.js +7 -7
- package/node/mat/get-boundary-piece-beziers.js.map +1 -1
- package/node/mat/mat.d.ts +1 -1
- package/node/point-on-shape/compare-poss.d.ts +3 -3
- package/node/point-on-shape/compare-poss.js +3 -3
- package/node/point-on-shape/get-osculating-circle.d.ts +1 -1
- package/node/point-on-shape/get-osculating-circle.js +1 -1
- package/node/point-on-shape/pos-to-human-string.d.ts +1 -1
- package/node/point-on-shape/pos-to-human-string.js +1 -1
- package/node/sat/cull.d.ts +7 -5
- package/node/sat/cull.js +7 -4
- package/node/sat/cull.js.map +1 -1
- package/node/sat/to-scale-axis.d.ts +3 -2
- package/node/sat/to-scale-axis.js +3 -2
- package/node/sat/to-scale-axis.js.map +1 -1
- package/package.json +5 -5
- package/src/closest-boundary-point/cull-bezier-pieces.ts +12 -11
- package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +8 -8
- package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +8 -8
- package/src/closest-boundary-point/get-best-distance-squared.ts +6 -6
- package/src/closest-boundary-point/get-close-boundary-points-certified.ts +8 -8
- package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +12 -18
- package/src/cp-node/fs/get-boundary-beziers-between.ts +6 -7
- package/src/cp-node/fs/get-boundary-beziers-to-next.ts +79 -53
- package/src/cp-node/fs/get-salience.ts +2 -2
- package/src/cp-node/fs/get-speed.ts +1 -6
- package/src/curve/curve.ts +5 -5
- package/src/debug/functions/draw-elem/two-prong.ts +40 -40
- package/src/debug/functions/two-prong.ts +195 -195
- package/src/debug/two-prong-for-debugging.ts +26 -26
- package/src/find-2-prong/add-debug-info.ts +38 -38
- package/src/find-2-prong/cull-bezier-pieces.ts +10 -10
- package/src/find-2-prong/find-2-prong.ts +8 -8
- package/src/find-2-prong/get-initial-bezier-pieces.ts +2 -2
- package/src/find-2-prong/reduce-radius.ts +5 -5
- package/src/find-3-prong.ts/calc-better-x.ts +3 -3
- package/src/find-3-prong.ts/calc-initial-3-prong-center.ts +3 -3
- package/src/find-3-prong.ts/find-3-prong-for-delta3s.ts +16 -16
- package/src/find-3-prong.ts/find-3-prong.ts +2 -2
- package/src/find-3-prong.ts/get-closest-points.ts +4 -4
- package/src/find-mat/add-2-prongs-by-error.ts +7 -7
- package/src/find-mat/find-mat.ts +6 -0
- package/src/find-mat/get-meta.ts +7 -1
- package/src/index.ts +2 -2
- package/src/mat/get-boundary-piece-beziers.ts +7 -7
- package/src/mat/get-two-prong-type.ts +8 -8
- package/src/sat/cull.ts +10 -7
- package/src/sat/to-scale-axis.ts +18 -17
- package/src/utils/bezier-piece-to-bezier.ts +7 -7
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.d.ts +0 -3
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js +0 -6
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js.map +0 -1
- package/src/closest-boundary-point/get-closest-boundary-point-certified.ts +0 -70
- package/src/cp-node/fs/cp-nodes-to-boundary-beziers.ts +0 -10
|
@@ -1,40 +1,75 @@
|
|
|
1
1
|
import { fromTo } from 'flo-bezier3';
|
|
2
|
-
|
|
3
|
-
const cpThis = cpNode;
|
|
4
|
-
const cpNext = cpNode.next;
|
|
5
|
-
const posThis = cpThis.cp.pointOnShape;
|
|
6
|
-
const posNext = cpNext.cp.pointOnShape;
|
|
7
|
-
const curveThis = posThis.curve;
|
|
8
|
-
const curveNext = posNext.curve;
|
|
9
|
-
if (curveThis.loop !== curveNext.loop) {
|
|
10
|
-
// It is a hole-closer going over to the other loop - a kind of terminal
|
|
11
|
-
// CpNode.
|
|
12
|
-
// return undefined!;
|
|
13
|
-
return [];
|
|
14
|
-
}
|
|
15
|
-
const beziers = [];
|
|
16
|
-
if (curveNext === curveThis) {
|
|
17
|
-
beziers.push(fromTo(posThis.curve.ps, posThis.t, posNext.t));
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
beziers.push(fromTo(posThis.curve.ps, posThis.t, 1));
|
|
21
|
-
addSkippedBeziers(beziers, posThis.curve, posNext.curve, posNext.t);
|
|
22
|
-
}
|
|
23
|
-
return beziers;
|
|
24
|
-
}
|
|
2
|
+
import { getBoundaryBezierPartsToNext } from './get-boundary-bezier-parts-to-next.js';
|
|
25
3
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
fromTo(curveThis.ps, 0, tEnd));
|
|
37
|
-
} while (curveThis !== curveEnd);
|
|
4
|
+
// * Returns the boundary beziers between this `CpNode` and the next
|
|
5
|
+
// * one.
|
|
6
|
+
// *
|
|
7
|
+
// * * returns `[]` if the next `CpNode` is on a different loop,
|
|
8
|
+
// * as this is a hole-closer and there are no boundary beziers between them.
|
|
9
|
+
// *
|
|
10
|
+
// * @param cpNode
|
|
11
|
+
// */
|
|
12
|
+
function getBoundaryBeziersToNext(cpNode) {
|
|
13
|
+
return getBoundaryBezierPartsToNext(cpNode).map(bp => fromTo(bp.ps, bp.ts[0], bp.ts[1]));
|
|
38
14
|
}
|
|
15
|
+
// /**
|
|
16
|
+
// * Returns the boundary beziers between this `CpNode` and the next
|
|
17
|
+
// * one.
|
|
18
|
+
// *
|
|
19
|
+
// * * returns `[]` if the next `CpNode` is on a different loop,
|
|
20
|
+
// * as this is a hole-closer and there are no boundary beziers between them.
|
|
21
|
+
// *
|
|
22
|
+
// * @param cpNode
|
|
23
|
+
// */
|
|
24
|
+
// function getBoundaryBeziersToNext(
|
|
25
|
+
// cpNode: CpNode): number[][][] {
|
|
26
|
+
// const cpThis = cpNode;
|
|
27
|
+
// const cpNext = cpNode.next;
|
|
28
|
+
// const posThis = cpThis.cp.pointOnShape;
|
|
29
|
+
// const posNext = cpNext.cp.pointOnShape;
|
|
30
|
+
// const curveThis = posThis.curve;
|
|
31
|
+
// const curveNext = posNext.curve;
|
|
32
|
+
// if (curveThis.loop !== curveNext.loop) {
|
|
33
|
+
// // It is a hole-closer going over to the other loop - a kind of terminal
|
|
34
|
+
// // CpNode.
|
|
35
|
+
// // return undefined!;
|
|
36
|
+
// return [];
|
|
37
|
+
// }
|
|
38
|
+
// const beziers: number[][][] = [];
|
|
39
|
+
// if (curveNext === curveThis) {
|
|
40
|
+
// beziers.push(
|
|
41
|
+
// fromTo(posThis.curve.ps, posThis.t, posNext.t)
|
|
42
|
+
// );
|
|
43
|
+
// } else {
|
|
44
|
+
// beziers.push(
|
|
45
|
+
// fromTo(posThis.curve.ps, posThis.t, 1)
|
|
46
|
+
// );
|
|
47
|
+
// addSkippedBeziers(
|
|
48
|
+
// beziers,
|
|
49
|
+
// posThis.curve,
|
|
50
|
+
// posNext.curve,
|
|
51
|
+
// posNext.t
|
|
52
|
+
// );
|
|
53
|
+
// }
|
|
54
|
+
// return beziers;
|
|
55
|
+
// }
|
|
56
|
+
// /**
|
|
57
|
+
// * Adds pieces of skipped beziers.
|
|
58
|
+
// * @internal
|
|
59
|
+
// */
|
|
60
|
+
// function addSkippedBeziers(
|
|
61
|
+
// beziers: number[][][],
|
|
62
|
+
// curveStart: Curve,
|
|
63
|
+
// curveEnd: Curve,
|
|
64
|
+
// t1: number) {
|
|
65
|
+
// let curveThis = curveStart;
|
|
66
|
+
// do {
|
|
67
|
+
// curveThis = curveThis.next;
|
|
68
|
+
// const tEnd = curveThis === curveEnd ? t1 : 1;
|
|
69
|
+
// beziers.push(
|
|
70
|
+
// fromTo(curveThis.ps, 0, tEnd)
|
|
71
|
+
// );
|
|
72
|
+
// } while (curveThis !== curveEnd);
|
|
73
|
+
// }
|
|
39
74
|
export { getBoundaryBeziersToNext };
|
|
40
75
|
//# sourceMappingURL=get-boundary-beziers-to-next.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-boundary-beziers-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-to-next.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-boundary-beziers-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-to-next.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAGtF;;;;;;;;MAQM;AACN,SAAS,wBAAwB,CACzB,MAAc;IAElB,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC,GAAG,CAC3C,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAC;AACN,CAAC;AAGD,MAAM;AACN,qEAAqE;AACrE,UAAU;AACV,MAAM;AACN,iEAAiE;AACjE,8EAA8E;AAC9E,MAAM;AACN,oBAAoB;AACpB,MAAM;AACN,qCAAqC;AACrC,0CAA0C;AAE1C,8BAA8B;AAC9B,kCAAkC;AAElC,8CAA8C;AAC9C,8CAA8C;AAE9C,uCAAuC;AACvC,uCAAuC;AAEvC,+CAA+C;AAC/C,mFAAmF;AACnF,qBAAqB;AACrB,gCAAgC;AAChC,qBAAqB;AACrB,QAAQ;AAER,wCAAwC;AAExC,qCAAqC;AACrC,wBAAwB;AACxB,6DAA6D;AAC7D,aAAa;AACb,eAAe;AACf,wBAAwB;AACxB,qDAAqD;AACrD,aAAa;AAEb,6BAA6B;AAC7B,uBAAuB;AACvB,6BAA6B;AAC7B,6BAA6B;AAC7B,wBAAwB;AACxB,aAAa;AACb,QAAQ;AAER,sBAAsB;AACtB,IAAI;AAGJ,MAAM;AACN,qCAAqC;AACrC,eAAe;AACf,MAAM;AACN,8BAA8B;AAC9B,iCAAiC;AACjC,6BAA6B;AAC7B,2BAA2B;AAC3B,wBAAwB;AAExB,kCAAkC;AAClC,WAAW;AACX,sCAAsC;AACtC,wDAAwD;AACxD,yBAAyB;AACzB,4CAA4C;AAC5C,aAAa;AACb,wCAAwC;AACxC,IAAI;AAGJ,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
|
|
@@ -12,8 +12,8 @@ function getSalience(cpNode) {
|
|
|
12
12
|
const bp1 = cpNode1.cp.pointOnShape.p;
|
|
13
13
|
const bp2 = cpNode2.cp.pointOnShape.p;
|
|
14
14
|
const d = distanceBetween(bp1, bp2);
|
|
15
|
-
const { pss
|
|
16
|
-
const s = sum(
|
|
15
|
+
const { pss, hasHoleCloser } = getBoundaryBeziersBetween(cpNode1, cpNode2);
|
|
16
|
+
const s = sum(pss.map(ps => totalLength(ps)));
|
|
17
17
|
return hasHoleCloser ? Number.POSITIVE_INFINITY : s / d;
|
|
18
18
|
}
|
|
19
19
|
export { getSalience };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-salience.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-salience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAc;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"get-salience.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-salience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAc;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3E,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9C,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;AAC1D,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { totalAbsoluteCurvature, totalLength } from "flo-bezier3";
|
|
|
2
2
|
import { memoize } from "flo-memoize";
|
|
3
3
|
import { getMatCurveToNext } from "./get-mat-curve-to-next.js";
|
|
4
4
|
import { getRealProngCount } from "./get-real-prong-count.js";
|
|
5
|
-
const { min, abs } = Math;
|
|
6
5
|
const getSpeed$ = memoize(getSpeed);
|
|
7
6
|
function getSpeed(cpNode) {
|
|
8
7
|
if (getRealProngCount(cpNode) !== 2) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-speed.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-speed.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"get-speed.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-speed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAGpC,SAAS,QAAQ,CAAC,MAAc;IAC5B,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;IACvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,SAAS,CAAC,CAAE,QAAQ;IAC/B,CAAC;IACD,uBAAuB;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC;IAElB,OAAO,IAAI,GAAC,CAAC,CAAC;AAClB,CAAC;AAKD,wBAAwB;AACpB,0BAA0B;AAC1B,4CAA4C;AAC5C,4CAA4C;AAC5C,yDAAyD;AACzD,yDAAyD;AAEzD,0DAA0D;AAC1D,0DAA0D;AAE1D,gCAAgC;AAChC,kCAAkC;AAElC,yBAAyB;AACzB,yBAAyB;AAEzB,4CAA4C;AAC5C,4CAA4C;AAG5C,qCAAqC;AAErC,gBAAgB;AACpB,IAAI;AAEJ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { CurvePiece } from '../mat/curve-piece.js';
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
|
-
* Cull all
|
|
4
|
+
* Cull all curvePieces not within given radius of a given point.
|
|
5
5
|
* @param extreme
|
|
6
|
-
* @param
|
|
6
|
+
* @param curvePieces
|
|
7
7
|
* @param p
|
|
8
8
|
* @param rSquared
|
|
9
9
|
*/
|
|
10
|
-
declare function
|
|
11
|
-
export {
|
|
10
|
+
declare function cullCurvePieces2(curvePieces: CurvePiece[], p: number[], rSquared: number): CurvePiece[];
|
|
11
|
+
export { cullCurvePieces2 };
|
|
@@ -2,27 +2,27 @@ import { getClosestSquareDistanceToRect } from '../geometry/get-closest-square-d
|
|
|
2
2
|
import { getBoundingBox$ } from '../geometry/get-bounding-box-.js';
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
|
-
* Cull all
|
|
5
|
+
* Cull all curvePieces not within given radius of a given point.
|
|
6
6
|
* @param extreme
|
|
7
|
-
* @param
|
|
7
|
+
* @param curvePieces
|
|
8
8
|
* @param p
|
|
9
9
|
* @param rSquared
|
|
10
10
|
*/
|
|
11
|
-
function
|
|
11
|
+
function cullCurvePieces2(curvePieces, p, rSquared) {
|
|
12
12
|
const TOLERANCE = 1 + 2 ** -10;
|
|
13
|
-
if (
|
|
14
|
-
return
|
|
13
|
+
if (curvePieces.length <= 1) {
|
|
14
|
+
return curvePieces;
|
|
15
15
|
}
|
|
16
16
|
const newPieces = [];
|
|
17
|
-
for (const
|
|
18
|
-
const ps =
|
|
17
|
+
for (const curvePiece of curvePieces) {
|
|
18
|
+
const ps = curvePiece.curve.ps;
|
|
19
19
|
const rect = getBoundingBox$(ps);
|
|
20
20
|
const bd = getClosestSquareDistanceToRect(rect, p);
|
|
21
21
|
if (bd <= TOLERANCE * rSquared) {
|
|
22
|
-
newPieces.push(
|
|
22
|
+
newPieces.push(curvePiece);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
return newPieces;
|
|
26
26
|
}
|
|
27
|
-
export {
|
|
27
|
+
export { cullCurvePieces2 };
|
|
28
28
|
//# sourceMappingURL=cull-bezier-pieces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cull-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/cull-bezier-pieces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE;;;;;;;GAOG;AACH,SAAS,
|
|
1
|
+
{"version":3,"file":"cull-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/cull-bezier-pieces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAEpG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE;;;;;;;GAOG;AACH,SAAS,gBAAgB,CACjB,WAAyB,EACzB,CAAW,EACX,QAAgB;IAEpB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC;IAE7B,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACvB,CAAC;IAGD,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,8BAA8B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,EAAE,IAAI,SAAS,GAAC,QAAQ,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { distanceBetween, fromTo, interpolate, rotate, translate } from 'flo-vector2d';
|
|
2
2
|
import { getOsculatingCircle } from '../point-on-shape/get-osculating-circle.js';
|
|
3
3
|
import { findEquidistantPointOnLineDd } from './find-equidistant-point-on-line-dd.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getInitialCurvePieces } from './get-initial-bezier-pieces.js';
|
|
5
5
|
import { getCloseBoundaryPointsCertified } from '../closest-boundary-point/get-close-boundary-points-certified.js';
|
|
6
6
|
import { reduceRadius } from './reduce-radius.js';
|
|
7
7
|
import { squaredDistanceBetweenDd } from './squared-distance-between-dd.js';
|
|
8
|
-
import {
|
|
8
|
+
import { cullCurvePieces2 } from './cull-bezier-pieces.js';
|
|
9
9
|
import { add1Prong } from './add-1-prong.js';
|
|
10
10
|
import { createPos } from '../point-on-shape/create-pos.js';
|
|
11
11
|
import { calcSeperationTolerance } from './calc-seperation-tolerance.js';
|
|
@@ -47,12 +47,12 @@ function find2Prong(meta, isHoleClosing, for1Prong, angle, y) {
|
|
|
47
47
|
const p = y.p;
|
|
48
48
|
// The boundary piece that should contain the other point of
|
|
49
49
|
// the 2-prong circle. (Defined by start and end points).
|
|
50
|
-
let
|
|
51
|
-
// console.log(
|
|
50
|
+
let curvePieces = getInitialCurvePieces(angle, isHoleClosing, loop, loops, meta, y, { center: xO, radius: rO });
|
|
51
|
+
// console.log(curvePieces.length);
|
|
52
52
|
/** The center of the two-prong (successively refined) */
|
|
53
53
|
let x = xO;
|
|
54
54
|
// The lines below is an optimization.
|
|
55
|
-
const r_ = sqrt(reduceRadius(maxCoordinate,
|
|
55
|
+
const r_ = sqrt(reduceRadius(maxCoordinate, curvePieces, p, xO));
|
|
56
56
|
if (rO > r_) {
|
|
57
57
|
x = interpolate(p, xO, r_ / rO);
|
|
58
58
|
}
|
|
@@ -63,11 +63,11 @@ function find2Prong(meta, isHoleClosing, for1Prong, angle, y) {
|
|
|
63
63
|
while (i < MAX_ITERATIONS) {
|
|
64
64
|
const xy = squaredDistanceBetweenDd(x, y.p);
|
|
65
65
|
if (i < 2) {
|
|
66
|
-
|
|
66
|
+
curvePieces = cullCurvePieces2(curvePieces, x, xy);
|
|
67
67
|
}
|
|
68
68
|
const pow = max(0, ceil(log2(maxCoordinate / xy))) + 1; // determines accuracy
|
|
69
69
|
// console.log(pow);
|
|
70
|
-
const _zs = getCloseBoundaryPointsCertified(pow,
|
|
70
|
+
const _zs = getCloseBoundaryPointsCertified(pow, curvePieces, x, y.curve, y.t, for1Prong && i == 0 && rO !== 1 / minCurvature, angle).map(info => createPos(info.curve, info.t, false));
|
|
71
71
|
let maxD = Number.NEGATIVE_INFINITY;
|
|
72
72
|
let maxPos = undefined;
|
|
73
73
|
zs = [];
|
|
@@ -125,7 +125,7 @@ function find2Prong(meta, isHoleClosing, for1Prong, angle, y) {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
const circle = { center: x, radius: distanceBetween(x, z.p) };
|
|
128
|
-
// if (typeof _debug_ !== 'undefined') { addDebugInfo(
|
|
128
|
+
// if (typeof _debug_ !== 'undefined') { addDebugInfo(curvePieces, false, x, y, z, circle!, δ!, xs, isHoleClosing); }
|
|
129
129
|
// return { circle, zs };
|
|
130
130
|
// zs = zs.filter(z => z !== undefined)
|
|
131
131
|
return { circle, zs: [z] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ import { PointOnShape } from '../point-on-shape/point-on-shape.js';
|
|
|
4
4
|
import { Circle } from '../geometry/circle.js';
|
|
5
5
|
import { MatMeta } from '../index.js';
|
|
6
6
|
/** @internal */
|
|
7
|
-
declare function
|
|
8
|
-
export {
|
|
7
|
+
declare function getInitialCurvePieces(angle: number, isHoleClosing: boolean, loop: Loop, loops: Loop[], meta: MatMeta, y: PointOnShape, circle: Circle): CurvePiece[];
|
|
8
|
+
export { getInitialCurvePieces };
|
|
@@ -4,7 +4,7 @@ import { calcPosOrder } from '../point-on-shape/calc-pos-order.js';
|
|
|
4
4
|
import { isPosCorner } from '../point-on-shape/is-pos-corner.js';
|
|
5
5
|
import { getPosCorner } from '../point-on-shape/get-pos-corner.js';
|
|
6
6
|
/** @internal */
|
|
7
|
-
function
|
|
7
|
+
function getInitialCurvePieces(angle, isHoleClosing, loop, loops,
|
|
8
8
|
// cpTrees: Map<Loop,LlRbTree<CpNode>>,
|
|
9
9
|
meta, y, circle) {
|
|
10
10
|
const { cpTrees } = meta;
|
|
@@ -31,5 +31,5 @@ meta, y, circle) {
|
|
|
31
31
|
}
|
|
32
32
|
return getBoundaryPieceBeziers([cpNode, cpNode]);
|
|
33
33
|
}
|
|
34
|
-
export {
|
|
34
|
+
export { getInitialCurvePieces };
|
|
35
35
|
//# sourceMappingURL=get-initial-bezier-pieces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-initial-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/get-initial-bezier-pieces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,gBAAgB;AAChB,SAAS,
|
|
1
|
+
{"version":3,"file":"get-initial-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/get-initial-bezier-pieces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,gBAAgB;AAChB,SAAS,qBAAqB,CACtB,KAAa,EACb,aAAsB,EACtB,IAAU,EACV,KAAa;AACb,uCAAuC;AACvC,IAAa,EACb,CAAe,EACf,MAAc;IAElB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,KAAK;aACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM;aACvB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;QAClD,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YACtB,CAAC,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACX,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC;IAER,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM;QACP,8DAA8D;QAC9D,kEAAkE;QAClE,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,CAAC;QACC,OAAO,IAAI,CAAC,MAAM;aACjB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,uBAAuB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
|
|
@@ -4,5 +4,5 @@ import { CurvePiece } from '../mat/curve-piece.js';
|
|
|
4
4
|
*
|
|
5
5
|
* Reduces the circle radius initially as an optimization step.
|
|
6
6
|
*/
|
|
7
|
-
declare function reduceRadius(extreme: number,
|
|
7
|
+
declare function reduceRadius(extreme: number, curvePieces: CurvePiece[], p: number[], x: number[]): number;
|
|
8
8
|
export { reduceRadius };
|
|
@@ -5,16 +5,16 @@ import { dot, lineLineIntersection, squaredDistanceBetween } from "flo-vector2d"
|
|
|
5
5
|
*
|
|
6
6
|
* Reduces the circle radius initially as an optimization step.
|
|
7
7
|
*/
|
|
8
|
-
function reduceRadius(extreme,
|
|
8
|
+
function reduceRadius(extreme, curvePieces, p, x) {
|
|
9
9
|
const TOLERANCE = 1 + 2 ** -10;
|
|
10
10
|
let minRadius = Number.POSITIVE_INFINITY;
|
|
11
|
-
for (let i = 0; i <
|
|
12
|
-
const
|
|
13
|
-
const ps =
|
|
11
|
+
for (let i = 0; i < curvePieces.length; i++) {
|
|
12
|
+
const curvePiece = curvePieces[i];
|
|
13
|
+
const ps = curvePiece.curve.ps;
|
|
14
14
|
// let min = Number.POSITIVE_INFINITY;
|
|
15
15
|
const num = 2;
|
|
16
16
|
for (let j = 0; j < (num + 1); j++) {
|
|
17
|
-
const p_ = evalDeCasteljau(ps,
|
|
17
|
+
const p_ = evalDeCasteljau(ps, curvePiece.ts[j / num]);
|
|
18
18
|
const cc = getCircleCenterFrom2PointsAndNormal(extreme, p, x, p_);
|
|
19
19
|
if (cc) {
|
|
20
20
|
let r = squaredDistanceBetween(p, cc);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reduce-radius.js","sourceRoot":"","sources":["../../src/find-2-prong/reduce-radius.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAIjF;;;;GAIG;AACH,SAAS,YAAY,CACb,OAAe,EACf,
|
|
1
|
+
{"version":3,"file":"reduce-radius.js","sourceRoot":"","sources":["../../src/find-2-prong/reduce-radius.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,13 @@ import { CurvePiece } from '../mat/curve-piece.js';
|
|
|
5
5
|
* Find new x and ps that are a better estimate of the 3-prong circle.
|
|
6
6
|
* The potential function, V, is defined as the distance to the actual 3 prong
|
|
7
7
|
* circle center.
|
|
8
|
-
* @param
|
|
8
|
+
* @param curvePiece3s The three boundary pieces, each of which should contain
|
|
9
9
|
* a point of the 3-prong to be found.
|
|
10
10
|
* @param x The currently best guess at the center of the 3-prong circle.
|
|
11
11
|
* @param vectorToZeroV
|
|
12
12
|
* @param extreme
|
|
13
13
|
*/
|
|
14
|
-
declare function calcBetterX(
|
|
14
|
+
declare function calcBetterX(curvePiece3s: CurvePiece[][], x: number[], vectorToZeroV: number[]): {
|
|
15
15
|
newX: number[];
|
|
16
16
|
newV: number;
|
|
17
17
|
newPoss: PointOnShape[];
|
|
@@ -5,13 +5,13 @@ import { getClosestPoints } from './get-closest-points.js';
|
|
|
5
5
|
* Find new x and ps that are a better estimate of the 3-prong circle.
|
|
6
6
|
* The potential function, V, is defined as the distance to the actual 3 prong
|
|
7
7
|
* circle center.
|
|
8
|
-
* @param
|
|
8
|
+
* @param curvePiece3s The three boundary pieces, each of which should contain
|
|
9
9
|
* a point of the 3-prong to be found.
|
|
10
10
|
* @param x The currently best guess at the center of the 3-prong circle.
|
|
11
11
|
* @param vectorToZeroV
|
|
12
12
|
* @param extreme
|
|
13
13
|
*/
|
|
14
|
-
function calcBetterX(
|
|
14
|
+
function calcBetterX(curvePiece3s, x, vectorToZeroV) {
|
|
15
15
|
const V = len(vectorToZeroV);
|
|
16
16
|
let nu = 1;
|
|
17
17
|
let better;
|
|
@@ -22,7 +22,7 @@ function calcBetterX(bezierPiece3s, x, vectorToZeroV) {
|
|
|
22
22
|
do {
|
|
23
23
|
const shift = scale(vectorToZeroV, nu);
|
|
24
24
|
newX = translate(shift, x);
|
|
25
|
-
newPoss = getClosestPoints(newX,
|
|
25
|
+
newPoss = getClosestPoints(newX, curvePiece3s);
|
|
26
26
|
// Point of zero V
|
|
27
27
|
const newCircleCenter = circumCenter(newPoss.map(pos => pos.p));
|
|
28
28
|
const newVectorToZeroV = fromTo(newX, newCircleCenter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calc-better-x.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/calc-better-x.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CACZ,
|
|
1
|
+
{"version":3,"file":"calc-better-x.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/calc-better-x.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CACZ,YAA4B,EAC5B,CAAW,EACX,aAAuB;IAE3B,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,CAAC;IACT,IAAI,OAAuB,CAAC;IAC5B,IAAI,IAAI,CAAC;IACT,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;IACvB,GAAG,CAAC;QACA,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAG3B,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE/C,kBAAkB;QAClB,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE7B,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;QAElB,EAAE,GAAG,EAAE,GAAC,CAAC,CAAC;QAEV,CAAC,EAAE,CAAC;IACR,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;IAE3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -6,8 +6,8 @@ import { CurvePiece } from '../mat/curve-piece.js';
|
|
|
6
6
|
* must be within the shape.
|
|
7
7
|
* @param δ3s - The three boundary pieces of which we need to find the three
|
|
8
8
|
* 3-prong points.
|
|
9
|
-
* @param
|
|
9
|
+
* @param curvePiece3s
|
|
10
10
|
* @param extreme
|
|
11
11
|
*/
|
|
12
|
-
declare function calcInitial3ProngCenter(maxCoordinate: number, δ3s: CpNode[][],
|
|
12
|
+
declare function calcInitial3ProngCenter(maxCoordinate: number, δ3s: CpNode[][], curvePiece3s: CurvePiece[][]): number[];
|
|
13
13
|
export { calcInitial3ProngCenter };
|
|
@@ -8,14 +8,14 @@ const { max, ceil, log2 } = Math;
|
|
|
8
8
|
* must be within the shape.
|
|
9
9
|
* @param δ3s - The three boundary pieces of which we need to find the three
|
|
10
10
|
* 3-prong points.
|
|
11
|
-
* @param
|
|
11
|
+
* @param curvePiece3s
|
|
12
12
|
* @param extreme
|
|
13
13
|
*/
|
|
14
|
-
function calcInitial3ProngCenter(maxCoordinate, δ3s,
|
|
14
|
+
function calcInitial3ProngCenter(maxCoordinate, δ3s, curvePiece3s) {
|
|
15
15
|
const circle = δ3s[0][0].cp.circle;
|
|
16
16
|
const twoProngCircleCenter = circle.center;
|
|
17
17
|
const pow = max(0, ceil(log2(maxCoordinate / circle.radius))) + 1; // determines accuracy;
|
|
18
|
-
const pos = getCloseBoundaryPointsCertified(pow,
|
|
18
|
+
const pos = getCloseBoundaryPointsCertified(pow, curvePiece3s[1], twoProngCircleCenter)[0];
|
|
19
19
|
const meanPoints = [
|
|
20
20
|
δ3s[0][0].cp.pointOnShape.p,
|
|
21
21
|
pos.p,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calc-initial-3-prong-center.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/calc-initial-3-prong-center.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAGnH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAEjC;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CACxB,aAAqB,EACrB,GAAe,EACf,
|
|
1
|
+
{"version":3,"file":"calc-initial-3-prong-center.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/calc-initial-3-prong-center.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAGnH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAEjC;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CACxB,aAAqB,EACrB,GAAe,EACf,YAA4B;IAEhC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;IACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAE3C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,uBAAuB;IACxF,MAAM,GAAG,GAAG,+BAA+B,CACvC,GAAG,EACH,YAAY,CAAC,CAAC,CAAC,EACf,oBAAoB,CACvB,CAAC,CAAC,CAAC,CAAC;IAEL,MAAM,UAAU,GAAG;QACf,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC;QACL,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;KAC9B,CAAC;IAEF,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
|
|
@@ -6,11 +6,11 @@ import { PointOnShape } from '../point-on-shape/point-on-shape.js';
|
|
|
6
6
|
* Finds a 3-prong using only the 3 given δs.
|
|
7
7
|
* @param δs The boundary pieces
|
|
8
8
|
* @param idx δ identifier
|
|
9
|
-
* @param
|
|
9
|
+
* @param curvePiecess
|
|
10
10
|
* @param maxCoordinate The maximum coordinate value used to calculate floating point
|
|
11
11
|
* tolerances.
|
|
12
12
|
*/
|
|
13
|
-
declare function find3ProngForDelta3s(δs: CpNode[][], idx: number, k: number,
|
|
13
|
+
declare function find3ProngForDelta3s(δs: CpNode[][], idx: number, k: number, curvePiecess: CurvePiece[][], maxCoordinate: number): {
|
|
14
14
|
poss: PointOnShape[];
|
|
15
15
|
circle: {
|
|
16
16
|
center: number[];
|
|
@@ -16,11 +16,11 @@ const calcVectorToZeroV_StraightToIt = fromTo;
|
|
|
16
16
|
* Finds a 3-prong using only the 3 given δs.
|
|
17
17
|
* @param δs The boundary pieces
|
|
18
18
|
* @param idx δ identifier
|
|
19
|
-
* @param
|
|
19
|
+
* @param curvePiecess
|
|
20
20
|
* @param maxCoordinate The maximum coordinate value used to calculate floating point
|
|
21
21
|
* tolerances.
|
|
22
22
|
*/
|
|
23
|
-
function find3ProngForDelta3s(δs, idx, k,
|
|
23
|
+
function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordinate) {
|
|
24
24
|
const TOLERANCE = 2 ** -32 * maxCoordinate;
|
|
25
25
|
const MAX_ITERATIONS = 10;
|
|
26
26
|
const δs_ = [
|
|
@@ -28,34 +28,34 @@ function find3ProngForDelta3s(δs, idx, k, bezierPiecess, maxCoordinate) {
|
|
|
28
28
|
δs[idx],
|
|
29
29
|
δs[δs.length - 1]
|
|
30
30
|
];
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
const curvePieces_ = [
|
|
32
|
+
curvePiecess[0],
|
|
33
|
+
curvePiecess[idx],
|
|
34
|
+
curvePiecess[δs.length - 1]
|
|
35
35
|
];
|
|
36
36
|
const δ3ss = [
|
|
37
37
|
[δs_[0], δs_[1], δs_[2]],
|
|
38
38
|
[δs_[1], δs_[2], δs_[0]],
|
|
39
39
|
[δs_[2], δs_[0], δs_[1]],
|
|
40
40
|
];
|
|
41
|
-
const
|
|
42
|
-
[
|
|
43
|
-
[
|
|
44
|
-
[
|
|
41
|
+
const curvePiecess_ = [
|
|
42
|
+
[curvePieces_[0], curvePieces_[1], curvePieces_[2]],
|
|
43
|
+
[curvePieces_[1], curvePieces_[2], curvePieces_[0]],
|
|
44
|
+
[curvePieces_[2], curvePieces_[0], curvePieces_[1]],
|
|
45
45
|
];
|
|
46
46
|
const δ3s = δ3ss[k];
|
|
47
|
-
const
|
|
47
|
+
const curvePiece3s = curvePiecess_[k];
|
|
48
48
|
if (isSharp(δ3s[0][0])) {
|
|
49
49
|
return undefined;
|
|
50
50
|
}
|
|
51
51
|
let poss = undefined;
|
|
52
52
|
let circumCenter_;
|
|
53
53
|
let j = 0; // Safeguard for slow convergence
|
|
54
|
-
let x = calcInitial3ProngCenter(maxCoordinate, δ3s,
|
|
54
|
+
let x = calcInitial3ProngCenter(maxCoordinate, δ3s, curvePiece3s);
|
|
55
55
|
let tolerance = Number.POSITIVE_INFINITY;
|
|
56
56
|
while (tolerance > TOLERANCE && j < MAX_ITERATIONS) {
|
|
57
57
|
j++;
|
|
58
|
-
poss = getClosestPoints(x,
|
|
58
|
+
poss = getClosestPoints(x, curvePiece3s);
|
|
59
59
|
if (!Number.isFinite(x[0]) || !Number.isFinite(x[1])) {
|
|
60
60
|
// TODO - the code can be cleaned up and sped up a lot if we don't
|
|
61
61
|
// use this function as is but instead use δs[0] and δs[2] as is
|
|
@@ -72,7 +72,7 @@ function find3ProngForDelta3s(δs, idx, k, bezierPiecess, maxCoordinate) {
|
|
|
72
72
|
// loop. This check, for instance, would be eliminated completely.
|
|
73
73
|
return undefined;
|
|
74
74
|
}
|
|
75
|
-
const upds = calcBetterX(
|
|
75
|
+
const upds = calcBetterX(curvePiece3s, x, vectorToZeroV);
|
|
76
76
|
x = upds.newX;
|
|
77
77
|
poss = upds.newPoss;
|
|
78
78
|
const V = len(vectorToZeroV); // The 'potential'
|
|
@@ -133,9 +133,9 @@ function find3ProngForDelta3s(δs, idx, k, bezierPiecess, maxCoordinate) {
|
|
|
133
133
|
// candidate for the 3-prong.
|
|
134
134
|
//-------------------------------------------------------------------------
|
|
135
135
|
const closestDs = [];
|
|
136
|
-
for (let i = 0; i <
|
|
136
|
+
for (let i = 0; i < curvePiecess.length; i++) {
|
|
137
137
|
const p = getCloseBoundaryPointsCertified(5, // TODO - see find-2-prong
|
|
138
|
-
|
|
138
|
+
curvePiecess[i], x)[0];
|
|
139
139
|
closestDs.push(distanceBetween(p.p, x));
|
|
140
140
|
}
|
|
141
141
|
const closestD = Math.min(...closestDs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EACzE,KAAK,EACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AACnH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;AAG7B,gBAAgB;AAChB,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAG9C;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CACrB,EAAc,EACd,GAAW,EACX,CAAS,EACT,
|
|
1
|
+
{"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../src/find-3-prong.ts/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"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"}
|