flo-mat 2.0.4 → 2.0.5
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 +75 -53
- package/browser/index.min.js +1 -1
- package/node/debug/functions/draw-elem/three-prong.js +1 -1
- package/node/debug/functions/draw-elem/two-prong.js +2 -2
- package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
- package/node/mat/closest-boundary-point/closest-points-on-curve.js +9 -6
- package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +1 -1
- package/node/mat/closest-boundary-point/get-close-boundary-points.js +0 -4
- package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +1 -1
- package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +1 -1
- package/node/mat/find-mat/add-3-prong.js +16 -12
- package/node/mat/find-mat/add-3-prong.js.map +1 -1
- package/node/mat/find-mat/create-get-interesting-points-on-loop.js +5 -4
- package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/find-2-prong.js +37 -7
- package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line-dd.d.ts +9 -0
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line-dd.js +58 -0
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -0
- package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
- package/node/mat/find-mat/get-sharp-corners.js +0 -1
- package/node/mat/find-mat/get-sharp-corners.js.map +1 -1
- package/node/mat/is-another-cp-closeby.js +5 -16
- package/node/mat/is-another-cp-closeby.js.map +1 -1
- package/node/point-on-shape.js.map +1 -1
- package/package.json +2 -2
- package/src/debug/functions/draw-elem/three-prong.ts +1 -1
- package/src/debug/functions/draw-elem/two-prong.ts +2 -2
- package/src/mat/closest-boundary-point/closest-points-on-curve.ts +12 -8
- package/src/mat/closest-boundary-point/get-close-boundary-points.ts +1 -5
- package/src/mat/closest-boundary-point/get-closest-boundary-point-dd.ts +62 -0
- package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +7 -7
- package/src/mat/cmp-cp-on-delta.ts +3 -0
- package/src/mat/find-mat/add-3-prong.ts +23 -13
- package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +5 -4
- package/src/mat/find-mat/find-2-prong/find-2-prong.ts +44 -9
- package/src/mat/find-mat/find-2-prong/find-equidistant-point-on-line-dd.ts +79 -0
- package/src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts +1 -1
- package/src/mat/find-mat/get-sharp-corners.ts +0 -1
- package/src/mat/is-another-cp-closeby.ts +8 -24
- package/src/point-on-shape.ts +2 -1
- package/src/mat/closest-boundary-point/closest-point-on-curve-old.ts_ +0 -88
- package/src/mat/closest-boundary-point/closest-point-on-curve.ts_ +0 -95
|
@@ -2,7 +2,7 @@ import { drawFs } from 'flo-draw';
|
|
|
2
2
|
import { getTwoProngType } from '../../../mat/get-two-prong-type.js';
|
|
3
3
|
/** @hidden */
|
|
4
4
|
function twoProng(g, twoProng) {
|
|
5
|
-
const scaleFactor = 0.
|
|
5
|
+
const scaleFactor = 0.01;
|
|
6
6
|
let $failedDot = [];
|
|
7
7
|
let $center = [];
|
|
8
8
|
let $circle = [];
|
|
@@ -26,7 +26,7 @@ function twoProng(g, twoProng) {
|
|
|
26
26
|
$failedDot = drawFs.dot(g, twoProng.pos.p, 1 * scaleFactor, 'black');
|
|
27
27
|
}
|
|
28
28
|
else if (!twoProng.failed) {
|
|
29
|
-
$center = drawFs.dot(g, twoProng.circle.center,
|
|
29
|
+
$center = drawFs.dot(g, twoProng.circle.center, 0.02 * scaleFactor, 'yellow');
|
|
30
30
|
$circle = drawFs.circle(g, twoProng.circle, color + 'thin' + thin + ' nofill');
|
|
31
31
|
$cp1 = drawFs.dot(g, twoProng.pos.p, 0.035 * scaleFactor, color);
|
|
32
32
|
$cp2 = drawFs.dot(g, twoProng.z, 0.07 * scaleFactor, color);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-prong.js","sourceRoot":"","sources":["../../../../src/debug/functions/draw-elem/two-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAGrE,cAAc;AACd,SAAS,QAAQ,CAAC,CAAc,EAAE,QAA8B;IAC/D,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"two-prong.js","sourceRoot":"","sources":["../../../../src/debug/functions/draw-elem/two-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAGrE,cAAc;AACd,SAAS,QAAQ,CAAC,CAAc,EAAE,QAA8B;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC;IAEzB,IAAI,UAAU,GAAkB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAqB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAqB,EAAE,CAAC;IACnC,IAAI,IAAI,GAAwB,EAAE,CAAC;IACnC,IAAI,IAAI,GAAwB,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC;IACV,IAAI,IAAI,CAAC;IAET,QAAQ,eAAe,CAAC,QAAQ,CAAC,EAAE;QAClC,KAAK,kBAAkB,CAAC,CAAC;YACxB,KAAK,GAAG,MAAM,CAAC;YACf,IAAI,GAAG,GAAG,CAAC;YACX,MAAM;SACN;QACD,KAAK,sBAAsB,CAAC,CAAC;YAC5B,KAAK,GAAG,OAAO,CAAC;YAChB,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM;SACN;KACD;IAGD,IAAI,QAAQ,CAAC,MAAM,EAAE;QACpB,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAC,WAAW,EAAE,OAAO,CAAC,CAAC;KACnE;SAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC5B,OAAO,GAAG,MAAM,CAAC,GAAG,CAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,GAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/E,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QAC/E,IAAI,GAAM,MAAM,CAAC,GAAG,CAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACrE,IAAI,GAAM,MAAM,CAAC,GAAG,CAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// qqq import { deflateQuad, allRootsMultiWithErrBounds, RootInterval } from 'flo-poly';
|
|
2
|
-
// qqq import { getTangentPolyFromPointExact, evalDeCasteljau, evaluate, getFootpointPolyExact } from 'flo-bezier3';
|
|
3
1
|
import { ddDeflate, allRootsCertified } from 'flo-poly';
|
|
4
2
|
import { evaluate, getFootpointPolyDd } from 'flo-bezier3';
|
|
5
3
|
/**
|
|
@@ -11,13 +9,10 @@ import { evaluate, getFootpointPolyDd } from 'flo-bezier3';
|
|
|
11
9
|
* @param t The t value of the bezier that locates p
|
|
12
10
|
*/
|
|
13
11
|
function closestPointsOnCurve(curve, p, [tS, tE] = [0, 1], touchedCurve, t) {
|
|
14
|
-
// qqq let poly = getTangentPolyFromPointExact(curve.ps, p);
|
|
15
12
|
const _poly = getFootpointPolyDd(curve.ps, p);
|
|
16
|
-
// qqq poly = deflateQuad(poly, t);
|
|
17
13
|
const poly = curve === touchedCurve
|
|
18
14
|
? ddDeflate(_poly, t)
|
|
19
15
|
: _poly;
|
|
20
|
-
// let roots: Omit<RootInterval,'multiplicity'>[] = allRootsMultiWithErrBounds(
|
|
21
16
|
const roots = allRootsCertified(poly, tS, tE);
|
|
22
17
|
// Also test the endpoints
|
|
23
18
|
let push0 = true;
|
|
@@ -64,8 +59,16 @@ function closestPointsOnCurve(curve, p, [tS, tE] = [0, 1], touchedCurve, t) {
|
|
|
64
59
|
? 0
|
|
65
60
|
: tE > 1 ? 1 : (tS + tE) / 2;
|
|
66
61
|
// TODO - why does evalDeCasteljau not work here?
|
|
67
|
-
return { p: evaluate(curve.ps, t), t };
|
|
68
62
|
//return { p: evalDeCasteljau(curve.ps,t), t }
|
|
63
|
+
// TODO2 - will make it slower
|
|
64
|
+
// const aa = evaluate(curve.ps,t);
|
|
65
|
+
// const bb = evalDeCasteljauDd(curve.ps,[0,t]).map(v => v[1]);
|
|
66
|
+
// if (aa[0] !== bb[0] || aa[1] !== bb[1]) {
|
|
67
|
+
// console.log(aa);
|
|
68
|
+
// console.log(bb);
|
|
69
|
+
// }
|
|
70
|
+
return { p: evaluate(curve.ps, t), t };
|
|
71
|
+
// return { p: evalDeCasteljauDd(curve.ps,[0,t]).map(v => v[1]), t }
|
|
69
72
|
});
|
|
70
73
|
return ps;
|
|
71
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closest-points-on-curve.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/closest-points-on-curve.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"closest-points-on-curve.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/closest-points-on-curve.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,11 +46,7 @@ function getCloseBoundaryPoints(bezierPieces, point, y, distance) {
|
|
|
46
46
|
// comparing closeness!
|
|
47
47
|
const indexesToCheck = [];
|
|
48
48
|
for (let i = 0; i < posInfos.length; i++) {
|
|
49
|
-
const pi = posInfos[i];
|
|
50
|
-
// Only check if they are close to the edges. Why??
|
|
51
|
-
//if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
|
|
52
49
|
indexesToCheck.push(i);
|
|
53
|
-
//}
|
|
54
50
|
}
|
|
55
51
|
const indexesToRemove = [];
|
|
56
52
|
for (let i = 0; i < indexesToCheck.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-close-boundary-points.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/get-close-boundary-points.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAiB,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CACvB,YAA2B,EAC3B,KAAe,EACrB,CAAgB,EAChB,QAAgB;IAEjB,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAEf,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAErD,yEAAyE;IACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAwC,EAAE,CAAC;IACzD,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,8DAA8D;QAC9D,MAAM,EAAE,GAAG,oBAAoB,CAC7B,WAAW,CAAC,KAAK,EACjB,KAAK,EACL,WAAW,CAAC,EAAE,EACd,YAAY,EACZ,CAAC,CACF,CAAC;QAEF,qCAAqC;QAErC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAEtC,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAC9B,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;YAEZ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAC,QAAQ,CAAC,GAAG,kBAAkB,EAAE;gBAC9C,IAAI,EAAE,KAAK,CAAC,EAAE;oBACb,EAAE,GAAG,CAAC,CAAC;oBACP,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC/B;gBAED,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACvD;SACD;KACD;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,2CAA2C;QAC3C,uEAAuE;QACvE,wEAAwE;QACxE,uBAAuB;QACvB,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,
|
|
1
|
+
{"version":3,"file":"get-close-boundary-points.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/get-close-boundary-points.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-closest-boundary-point.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/get-closest-boundary-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAiB,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE;;;;;;;;;GASG;AACH,SAAS,uBAAuB,CACxB,YAA2B,EAC3B,KAAe,EACrB,YAAmB,EACnB,CAAS;IAEV,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC5C,IAAI,OAA0C,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-closest-boundary-point.js","sourceRoot":"","sources":["../../../src/mat/closest-boundary-point/get-closest-boundary-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAiB,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE;;;;;;;;;GASG;AACH,SAAS,uBAAuB,CACxB,YAA2B,EAC3B,KAAe,EACrB,YAAmB,EACnB,CAAS;IAEV,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC5C,IAAI,OAA0C,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,oBAAoB,CAC3B,WAAW,CAAC,KAAK,EACjB,KAAK,EACL,WAAW,CAAC,EAAE,EACd,YAAY,EACZ,CAAC,CACJ,CAAC;QAER,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE9C,IAAI,CAAC,KAAK,SAAS,EAAE;YAAE,SAAS;SAAE;QAElC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEtC,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAC9B,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;QAEZ,IAAI,CAAC,GAAG,YAAY,EAAE;YACrB,IAAI,EAAE,KAAK,CAAC,EAAE;gBACb,EAAE,GAAG,CAAC,CAAC;gBACP,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;aAC/B;YAED,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,YAAY,GAAG,CAAC,CAAC;SACjB;KACD;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -14,24 +14,27 @@ function add3Prong(cpTrees, orders, threeProng) {
|
|
|
14
14
|
/*
|
|
15
15
|
if (typeof _debug_ !== 'undefined') {
|
|
16
16
|
for (let i=0; i<3; i++) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
//let cmpBef = PointOnShape.compareInclOrder(cpBef.pointOnShape, ps[i], cpBef.order, orders[i]);
|
|
20
|
-
//let cmpAft = PointOnShape.compareInclOrder(cpAft.pointOnShape, ps[i], cpAft.order, orders[i]);
|
|
17
|
+
const cpBef = threeProng.δ3s[i][0].cp;
|
|
18
|
+
const cpAft = threeProng.δ3s[i][1].cp;
|
|
21
19
|
|
|
22
|
-
let cmpBef = PointOnShape.
|
|
23
|
-
let cmpAft = PointOnShape.
|
|
20
|
+
//let cmpBef = PointOnShape.compareInclOrder(cpBef.pointOnShape, poss[i], cpBef.order, orders[i]);
|
|
21
|
+
//let cmpAft = PointOnShape.compareInclOrder(cpAft.pointOnShape, poss[i], cpAft.order, orders[i]);
|
|
22
|
+
const cmpBef = compareCps(cpBef, { pointOnShape: poss[i], order: orders[i], order2: 0, circle: undefined });
|
|
23
|
+
const cmpAft = compareCps(cpAft, { pointOnShape: poss[i], order: orders[i], order2: 0, circle: undefined });
|
|
24
|
+
|
|
25
|
+
// const cmpBef = comparePoss(cpBef.pointOnShape, poss[i]);
|
|
26
|
+
// const cmpAft = comparePoss(cpAft.pointOnShape, poss[i]);
|
|
24
27
|
|
|
25
28
|
// len is used by debug functions to reference a particular
|
|
26
29
|
// three-prong.
|
|
27
|
-
|
|
30
|
+
const len = _debug_.generated.elems.threeProng.length-1;
|
|
28
31
|
if (cmpBef > 0) {
|
|
29
32
|
console.log('----------------------------------------');
|
|
30
33
|
console.log(`3-prong order is wrong (bef) : i: ${i} - cmp: ${cmpBef} - n: ${len}`);
|
|
31
34
|
console.log(threeProng);
|
|
32
35
|
console.log(cpBef);
|
|
33
36
|
console.log(cpAft);
|
|
34
|
-
console.log(
|
|
37
|
+
console.log(poss[i]);
|
|
35
38
|
}
|
|
36
39
|
if (cmpAft < 0) {
|
|
37
40
|
console.log('----------------------------------------');
|
|
@@ -39,15 +42,16 @@ function add3Prong(cpTrees, orders, threeProng) {
|
|
|
39
42
|
console.log(threeProng);
|
|
40
43
|
console.log(cpBef);
|
|
41
44
|
console.log(cpAft);
|
|
42
|
-
console.log(
|
|
45
|
+
console.log(poss[i]);
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
*/
|
|
47
50
|
// TODO - replace 1000 below with correct value
|
|
48
|
-
isAnotherCpCloseby(cpTrees, poss[0], circle, orders[0], 0, 1000, 'blue');
|
|
49
|
-
isAnotherCpCloseby(cpTrees, poss[1], circle, orders[1], 0, 1000, 'blue');
|
|
50
|
-
isAnotherCpCloseby(cpTrees, poss[2], circle, orders[2], 0, 1000, 'blue');
|
|
51
|
+
const c1 = isAnotherCpCloseby(cpTrees, poss[0], circle, orders[0], 0, 1000, 'blue');
|
|
52
|
+
const c2 = isAnotherCpCloseby(cpTrees, poss[1], circle, orders[1], 0, 1000, 'blue');
|
|
53
|
+
const c3 = isAnotherCpCloseby(cpTrees, poss[2], circle, orders[2], 0, 1000, 'blue');
|
|
54
|
+
// console.log(c1,c2,c3);
|
|
51
55
|
addToCpGraph(circle, orders, cpTrees, poss, δ3s);
|
|
52
56
|
return circle;
|
|
53
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-3-prong.js","sourceRoot":"","sources":["../../../src/mat/find-mat/add-3-prong.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add-3-prong.js","sourceRoot":"","sources":["../../../src/mat/find-mat/add-3-prong.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;;;;;GAOG;AACH,SAAS,SAAS,CAChB,OAAmC,EACnC,MAAgB,EAChB,UAIC;IAEF,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;IAE7C,uCAAuC;IAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCE;IAEF,+CAA+C;IAC/C,MAAM,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpF,MAAM,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpF,MAAM,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAEpF,yBAAyB;IAEzB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC;AACf,CAAC;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -36,10 +36,11 @@ function getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength) {
|
|
|
36
36
|
// qqq let maxAbsCurvatures = [...maxCurvatureTs, ...maxNegativeCurvatureTs].map(t => new PointOnShape(curve, t));
|
|
37
37
|
const maxAbsCurvatures = [...maxima].map(t => new PointOnShape(curve, t));
|
|
38
38
|
allPoints.push(...getContactCirclesAtInterface(curve), ...maxAbsCurvatures);
|
|
39
|
-
|
|
40
|
-
if (ts.length
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
const ts = splitByCurvatureAndLength(curve.ps, maxCurviness, maxLength);
|
|
40
|
+
// if (ts.length > 10) { console.log(ts); }
|
|
41
|
+
// if (ts.length === 2) {
|
|
42
|
+
// ts = [0, 0.5, 1];
|
|
43
|
+
// }
|
|
43
44
|
for (let i = 1; i < ts.length - 1; i++) {
|
|
44
45
|
allPoints.push(new PointOnShape(curve, ts[i]));
|
|
45
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-interesting-points-on-loop.js","sourceRoot":"","sources":["../../../src/mat/find-mat/create-get-interesting-points-on-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAGnF;;;;;;GAMG;AACH,SAAS,0BAA0B,CAC3B,YAAoB,EACpB,YAAoB,EACpB,SAAiB;IAErB,OAAO,UAAS,IAAU;QACtB,MAAM,SAAS,GAAoB,EAAE,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE7B,8DAA8D;YAC9D,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE;gBAClD,SAAS;aACZ;YAGD;;;;;;;;;;;cAWE;YAEF,kDAAkD;YAClD,sFAAsF;YACtF,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,sEAAsE;YACtE,kHAAkH;YAClH,MAAM,gBAAgB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1E,SAAS,CAAC,IAAI,CACV,GAAG,4BAA4B,CAAC,KAAK,CAAC,EACtC,GAAG,gBAAgB,CACtB,CAAC;YAEF,
|
|
1
|
+
{"version":3,"file":"create-get-interesting-points-on-loop.js","sourceRoot":"","sources":["../../../src/mat/find-mat/create-get-interesting-points-on-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAGnF;;;;;;GAMG;AACH,SAAS,0BAA0B,CAC3B,YAAoB,EACpB,YAAoB,EACpB,SAAiB;IAErB,OAAO,UAAS,IAAU;QACtB,MAAM,SAAS,GAAoB,EAAE,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE7B,8DAA8D;YAC9D,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE;gBAClD,SAAS;aACZ;YAGD;;;;;;;;;;;cAWE;YAEF,kDAAkD;YAClD,sFAAsF;YACtF,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,sEAAsE;YACtE,kHAAkH;YAClH,MAAM,gBAAgB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1E,SAAS,CAAC,IAAI,CACV,GAAG,4BAA4B,CAAC,KAAK,CAAC,EACtC,GAAG,gBAAgB,CACtB,CAAC;YAEF,MAAM,EAAE,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACxE,2CAA2C;YAC3C,yBAAyB;YACzB,wBAAwB;YACxB,IAAI;YAEJ,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,CAAC,MAAM,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC9B,SAAS,CAAC,IAAI,CAAE,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;aACpD;SACJ;QAED,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5B,OAAO,SAAS,CAAC;IACrB,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,0BAA0B,EAAE,CAAA"}
|
|
@@ -35,9 +35,11 @@ const evalDeCasteljau = evalDeCasteljau_;
|
|
|
35
35
|
*/
|
|
36
36
|
function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClosing, k) {
|
|
37
37
|
const MAX_ITERATIONS = 25;
|
|
38
|
-
const squaredSeperationTolerance = (1e-
|
|
38
|
+
const squaredSeperationTolerance = (1e-5 * extreme) ** 2;
|
|
39
39
|
// TODO - base deltas on theory or remove
|
|
40
40
|
const oneProngTolerance = (1e-4) ** 2;
|
|
41
|
+
// const oneProngTolerance = (1e-5)**2;
|
|
42
|
+
// const oneProngTolerance = 0;
|
|
41
43
|
const squaredErrorTolerance = 1e-2 * squaredSeperationTolerance;
|
|
42
44
|
const maxOsculatingCircleRadiusSquared = squaredDiagonalLength;
|
|
43
45
|
// The boundary piece that should contain the other point of
|
|
@@ -55,7 +57,6 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
55
57
|
}
|
|
56
58
|
else {
|
|
57
59
|
p = y.p;
|
|
58
|
-
//x = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadiusSquared, y).center;
|
|
59
60
|
x = getOsculatingCircle(maxOsculatingCircleRadiusSquared, y).center;
|
|
60
61
|
r = squaredDistanceBetween(p, x);
|
|
61
62
|
}
|
|
@@ -76,8 +77,8 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
76
77
|
do {
|
|
77
78
|
i++;
|
|
78
79
|
/** squared distance between source boundary point and circle center */
|
|
79
|
-
const
|
|
80
|
-
bezierPieces_ = cullBezierPieces(bezierPieces_, x,
|
|
80
|
+
const xy = squaredDistanceBetween(x, y.p);
|
|
81
|
+
bezierPieces_ = cullBezierPieces(bezierPieces_, x, xy);
|
|
81
82
|
z = getClosestBoundaryPoint(bezierPieces_, x, y.curve, y.t);
|
|
82
83
|
if (z === undefined) {
|
|
83
84
|
if (typeof _debug_ !== 'undefined') {
|
|
@@ -97,16 +98,18 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
97
98
|
xs.push({ x, y, z: z.pos, t: y.t });
|
|
98
99
|
}
|
|
99
100
|
/** squared distance between anti-pode boundary point and circle center */
|
|
100
|
-
const
|
|
101
|
+
const xz = squaredDistanceBetween(x, z.pos.p);
|
|
101
102
|
//if (i === 1 && d*oneProngTolerance >= r) {
|
|
102
|
-
if (i === 1 &&
|
|
103
|
+
if (i === 1 && xy < xz + oneProngTolerance) {
|
|
103
104
|
// It is a 1-prong.
|
|
105
|
+
// TODO2 - below line was removed (maybe)
|
|
104
106
|
add1Prong(Math.sqrt(maxOsculatingCircleRadiusSquared), cpTrees, y);
|
|
105
107
|
return undefined;
|
|
106
108
|
}
|
|
107
109
|
// TODO - squaredSeperationTolerance should in future be replaced with
|
|
108
110
|
// a relative error, i.e. distance between y (or z) / length(y (or z)).
|
|
109
|
-
|
|
111
|
+
const yz = squaredDistanceBetween(y.p, z.pos.p);
|
|
112
|
+
if (!isHoleClosing && yz <= squaredSeperationTolerance) {
|
|
110
113
|
if (typeof _debug_ !== 'undefined') {
|
|
111
114
|
/*
|
|
112
115
|
let elems = _debug_.generated.elems;
|
|
@@ -128,8 +131,10 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
128
131
|
// nextX, but rather (distance from x to y) - (distance from x to z)
|
|
129
132
|
// Find the point on the line connecting y with x that is
|
|
130
133
|
// equidistant from y and z. This will be our next x.
|
|
134
|
+
// const nextX = findEquidistantPointOnLineDd(x, y.p, z.pos.p);
|
|
131
135
|
const nextX = findEquidistantPointOnLine(x, y.p, z.pos.p);
|
|
132
136
|
const squaredError = squaredDistanceBetween(x, nextX);
|
|
137
|
+
// const squaredError = Math.abs(xy - xz);
|
|
133
138
|
x = nextX;
|
|
134
139
|
if (squaredError < squaredErrorTolerance) {
|
|
135
140
|
done++; // Do one more iteration
|
|
@@ -140,6 +145,29 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
140
145
|
break; // We're done
|
|
141
146
|
}
|
|
142
147
|
} while (done < 1);
|
|
148
|
+
/************************************************************************ */
|
|
149
|
+
/* Do one more double-double precision iteration
|
|
150
|
+
/************************************************************************ */
|
|
151
|
+
/*
|
|
152
|
+
z = getClosestBoundaryPoint(
|
|
153
|
+
bezierPieces_, x, y.curve, y.t
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
if (z === undefined) {
|
|
157
|
+
failed = true;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (typeof _debug_ !== 'undefined') {
|
|
161
|
+
xs.push({ x, y, z: z.pos, t: y.t });
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (!isHoleClosing && squaredDistanceBetween(y.p, z.pos.p) <= squaredSeperationTolerance) {
|
|
165
|
+
failed = true;
|
|
166
|
+
} else {
|
|
167
|
+
x = findEquidistantPointOnLineDd(x, y.p, z.pos.p);
|
|
168
|
+
}
|
|
169
|
+
/************************************************************************ */
|
|
170
|
+
/************************************************************************ */
|
|
143
171
|
// TODO - Optimization: only do this if second closest point is within the
|
|
144
172
|
// tolerance which can be checked in getClosestBoundaryPoint algorithm
|
|
145
173
|
let zs = [];
|
|
@@ -154,6 +182,8 @@ function find2Prong(loops, extreme, squaredDiagonalLength, cpTrees, y, isHoleClo
|
|
|
154
182
|
if (z !== undefined) {
|
|
155
183
|
circle = { center: x, radius: distanceBetween(x, z.pos.p) };
|
|
156
184
|
}
|
|
185
|
+
// TODO2
|
|
186
|
+
// if (Math.random() > 0.8 && !isHoleClosing) { return undefined; }
|
|
157
187
|
if (typeof _debug_ !== 'undefined' && !failed) {
|
|
158
188
|
xs.push({ x, y, z: z.pos, t: y.t });
|
|
159
189
|
addDebugInfo(bezierPieces, failed, y, circle, z.pos, δ, xs, isHoleClosing);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../../../src/mat/find-mat/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../../../src/mat/find-mat/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hidden
|
|
3
|
+
* @param x
|
|
4
|
+
* @param y
|
|
5
|
+
* @param z
|
|
6
|
+
* @returns The point on the line from y to x that is equidistant from y and z.
|
|
7
|
+
*/
|
|
8
|
+
declare function findEquidistantPointOnLineDd(x: number[], y: number[], z: number[]): number[];
|
|
9
|
+
export { findEquidistantPointOnLineDd };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { twoDiff, twoSum, twoProduct, ddDivDd, ddAddDd, ddDiffDd, ddMultDd, ddMultBy2, ddMultDouble1 } from "double-double";
|
|
2
|
+
const { abs } = Math;
|
|
3
|
+
const td = twoDiff;
|
|
4
|
+
const ts = twoSum;
|
|
5
|
+
const tp = twoProduct;
|
|
6
|
+
/**
|
|
7
|
+
* @hidden
|
|
8
|
+
* @param x
|
|
9
|
+
* @param y
|
|
10
|
+
* @param z
|
|
11
|
+
* @returns The point on the line from y to x that is equidistant from y and z.
|
|
12
|
+
*/
|
|
13
|
+
function findEquidistantPointOnLineDd(x, y, z) {
|
|
14
|
+
// Some basic algebra (not shown) finds the required point.
|
|
15
|
+
// Swap axes if x and y are more aligned to y-axis than to x-axis.
|
|
16
|
+
// TODO2 - changed
|
|
17
|
+
// const swapAxes = abs((x[1] - y[1]) / (x[0] - y[0])) > 1;
|
|
18
|
+
const swapAxes = abs(x[1] - y[1]) > abs(x[0] - y[0]);
|
|
19
|
+
// Cache
|
|
20
|
+
let x1;
|
|
21
|
+
let x2;
|
|
22
|
+
let y1;
|
|
23
|
+
let y2;
|
|
24
|
+
let z1;
|
|
25
|
+
let z2;
|
|
26
|
+
if (swapAxes) {
|
|
27
|
+
x1 = x[1];
|
|
28
|
+
x2 = x[0];
|
|
29
|
+
y1 = y[1];
|
|
30
|
+
y2 = y[0];
|
|
31
|
+
z1 = z[1];
|
|
32
|
+
z2 = z[0];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
x1 = x[0];
|
|
36
|
+
x2 = x[1];
|
|
37
|
+
y1 = y[0];
|
|
38
|
+
y2 = y[1];
|
|
39
|
+
z1 = z[0];
|
|
40
|
+
z2 = z[1];
|
|
41
|
+
}
|
|
42
|
+
// a <= 1 (due to swapped axes)
|
|
43
|
+
// const a = (x2 - y2) / (x1 - y1);
|
|
44
|
+
// const b = y2 - a*y1;
|
|
45
|
+
// const c = (y1*y1 + y2*y2 - z1*z1 - z2*z2) + 2*b*(z2 - y2);
|
|
46
|
+
// const d = y1 - z1 + a*(y2 - z2);
|
|
47
|
+
// const t1 = c/(2*d);
|
|
48
|
+
// const t2 = a*t1 + b;
|
|
49
|
+
const a = ddDivDd(td(x2, y2), td(x1, y1));
|
|
50
|
+
const b = ddDiffDd([0, y2], ddMultDouble1(y1, a));
|
|
51
|
+
const c = ddAddDd((ddDiffDd(ddAddDd(tp(y1, y1), tp(y2, y2)), ddAddDd(tp(z1, z1), tp(z2, z2)))), ddMultBy2(ddMultDd(b, (td(z2, y2)))));
|
|
52
|
+
const d = ddAddDd(td(y1, z1), ddMultDd(a, td(y2, z2)));
|
|
53
|
+
const t1 = ddDivDd(c, ddMultBy2(d));
|
|
54
|
+
const t2 = ddAddDd(ddMultDd(a, t1), b);
|
|
55
|
+
return swapAxes ? [t2[1], t1[1]] : [t1[1], t2[1]];
|
|
56
|
+
}
|
|
57
|
+
export { findEquidistantPointOnLineDd };
|
|
58
|
+
//# sourceMappingURL=find-equidistant-point-on-line-dd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-equidistant-point-on-line-dd.js","sourceRoot":"","sources":["../../../../src/mat/find-mat/find-2-prong/find-equidistant-point-on-line-dd.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,EAAE,MAAM,EAAE,UAAU,EAAmB,OAAO,EACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EACrD,MAAM,eAAe,CAAC;AAGvB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAErB,MAAM,EAAE,GAAG,OAAO,CAAC;AACnB,MAAM,EAAE,GAAG,MAAM,CAAC;AAClB,MAAM,EAAE,GAAG,UAAU,CAAC;AAItB;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,CAAW,EAAE,CAAW,EAAE,CAAW;IAC1E,2DAA2D;IAE3D,kEAAkE;IAClE,kBAAkB;IAClB,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,QAAQ;IACR,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IAEf,IAAI,QAAQ,EAAE;QACb,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACrB;SAAM;QACN,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACrB;IAED,+BAA+B;IAC/B,oCAAoC;IACpC,uBAAuB;IACvB,6DAA6D;IAC7D,mCAAmC;IACnC,sBAAsB;IACtB,uBAAuB;IAGvB,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;IAIhD,MAAM,CAAC,GAAG,OAAO,CAChB,CAAC,QAAQ,CACR,OAAO,CAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAC7B,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAClC,CAAC;IAGF,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAC,EAAE,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAGD,OAAO,EAAE,4BAA4B,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../../../src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"AAGA,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;AAItC,OAAO,EAAE,eAAe,EAAiB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,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,
|
|
1
|
+
{"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../../../src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-sharp-corners.js","sourceRoot":"","sources":["../../../src/mat/find-mat/get-sharp-corners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,cAAc;AACd,SAAS,eAAe,CAAC,WAA8B;IACnD,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC5B,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,
|
|
1
|
+
{"version":3,"file":"get-sharp-corners.js","sourceRoot":"","sources":["../../../src/mat/find-mat/get-sharp-corners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,cAAc;AACd,SAAS,eAAe,CAAC,WAA8B;IACnD,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC5B,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE;gBAC5B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1B;SACJ;QAED,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1C;IAED,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { distanceBetween, toUnitVector, fromTo, dot } from 'flo-vector2d';
|
|
2
2
|
import { getNeighbouringPoints } from './get-neighboring-cps.js';
|
|
3
3
|
/** @hidden */
|
|
4
|
-
|
|
5
|
-
const ANGLE_THRESHOLD = 0.9986295347545738; // === Math.cos(3 degrees)
|
|
6
|
-
//const ANGLE_THRESHOLD = 0.9848077530122080; // === Math.cos(10 degrees)
|
|
7
|
-
//const ANGLE_THRESHOLD = 0.9998476951563913; // === Math.cos(1 degrees)
|
|
8
|
-
//const ANGLE_THRESHOLD = 0.9999984769132877; // === Math.cos(0.1 degrees)
|
|
9
|
-
//const ANGLE_THRESHOLD = 0.9999999847691291 // === Math.cos(0.01 degrees)
|
|
4
|
+
const ANGLE_THRESHOLD = Math.cos(15 * (Math.PI / 180)); // 15 degrees
|
|
10
5
|
/**
|
|
11
6
|
* @hidden
|
|
12
7
|
* Returns true if another CpNode is close to the given implied (via pos, order
|
|
@@ -21,15 +16,7 @@ const ANGLE_THRESHOLD = 0.9986295347545738; // === Math.cos(3 degrees)
|
|
|
21
16
|
* @param color Used for debugging only
|
|
22
17
|
*/
|
|
23
18
|
function isAnotherCpCloseby(cpTrees, pos, circle, order, order2, extreme, color) {
|
|
24
|
-
//console.log(extreme)
|
|
25
|
-
//const DISTANCE_THRESHOLD = extreme * 1e-1;
|
|
26
|
-
//const DISTANCE_THRESHOLD = extreme * 1e-1;
|
|
27
19
|
const DISTANCE_THRESHOLD = extreme * 1e-4;
|
|
28
|
-
//const DISTANCE_THRESHOLD = extreme * 1e-4; - was this
|
|
29
|
-
//const DISTANCE_THRESHOLD = extreme * 1e-6;
|
|
30
|
-
//const DISTANCE_THRESHOLD = extreme * 1e-12;
|
|
31
|
-
// It seems this can be zero else the ordering should be correct
|
|
32
|
-
//const DISTANCE_THRESHOLD = 0;
|
|
33
20
|
const cpTree = cpTrees.get(pos.curve.loop);
|
|
34
21
|
const cpNodes = getNeighbouringPoints(cpTree, pos, order, order2);
|
|
35
22
|
if (!cpNodes[0]) {
|
|
@@ -42,11 +29,13 @@ function isAnotherCpCloseby(cpTrees, pos, circle, order, order2, extreme, color)
|
|
|
42
29
|
if (distanceBetween(p1, p2) > DISTANCE_THRESHOLD) {
|
|
43
30
|
continue;
|
|
44
31
|
}
|
|
45
|
-
|
|
32
|
+
// TODO2
|
|
33
|
+
return true;
|
|
34
|
+
const v1 = toUnitVector(fromTo(p2, cpNode.cp.circle.center));
|
|
46
35
|
const v2 = toUnitVector(fromTo(p1, circle.center));
|
|
47
36
|
const cosTheta = dot(v1, v2);
|
|
48
37
|
if (cosTheta > ANGLE_THRESHOLD) {
|
|
49
|
-
//console.log(`%c${cosTheta} - ${distanceBetween(p1,p2)}`, `color: ${color}`);
|
|
38
|
+
// console.log(`%c${cosTheta} - ${distanceBetween(p1,p2)}`, `color: ${color}`);
|
|
50
39
|
return true;
|
|
51
40
|
}
|
|
52
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-another-cp-closeby.js","sourceRoot":"","sources":["../../src/mat/is-another-cp-closeby.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAK1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,cAAc;AACd,
|
|
1
|
+
{"version":3,"file":"is-another-cp-closeby.js","sourceRoot":"","sources":["../../src/mat/is-another-cp-closeby.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAK1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,cAAc;AACd,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAE,aAAa;AAGtE;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CACnB,OAAmC,EACnC,GAAkB,EAClB,MAAc,EACd,KAAa,EACb,MAAc,EACd,OAAe,EACf,KAAa;IAEjB,MAAM,kBAAkB,GAAG,OAAO,GAAG,IAAI,CAAC;IAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,KAAK,CAAA;KAAE;IAEjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;QACpC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAElB,IAAI,eAAe,CAAC,EAAE,EAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE;YAC7C,SAAS;SACZ;QAED,QAAQ;QACR,OAAO,IAAI,CAAC;QAEZ,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;QAE5B,IAAI,QAAQ,GAAG,eAAe,EAAE;YAC5B,+EAA+E;YAC/E,OAAO,IAAI,CAAC;SACf;KACJ;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-on-shape.js","sourceRoot":"","sources":["../src/point-on-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAQ,aAAa,CAAC;AACpE,OAAO,EAAS,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"point-on-shape.js","sourceRoot":"","sources":["../src/point-on-shape.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "flo-mat",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"description": "Medial / Scale Axis Transform (MAT/SAT) Library.",
|
|
5
|
-
"version": "2.0.
|
|
5
|
+
"version": "2.0.5",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Floris Steenkamp"
|
|
8
8
|
},
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"c8": "^8.0.0",
|
|
52
52
|
"chai": "^4.3.7",
|
|
53
53
|
"circular-dependency-plugin": "^5.2.2",
|
|
54
|
-
"eslint": "^8.
|
|
54
|
+
"eslint": "^8.45.0",
|
|
55
55
|
"eslint-plugin-tree-shaking": "^1.10.0",
|
|
56
56
|
"mocha": "^10.2.0",
|
|
57
57
|
"resolve-typescript-plugin": "^2.0.1",
|
|
@@ -5,7 +5,7 @@ import { getTwoProngType } from '../../../mat/get-two-prong-type.js';
|
|
|
5
5
|
|
|
6
6
|
/** @hidden */
|
|
7
7
|
function twoProng(g: SVGGElement, twoProng: TwoProngForDebugging) {
|
|
8
|
-
const scaleFactor = 0.
|
|
8
|
+
const scaleFactor = 0.01;
|
|
9
9
|
|
|
10
10
|
let $failedDot : SVGElement[] = [];
|
|
11
11
|
let $center : SVGElement[] = [];
|
|
@@ -33,7 +33,7 @@ function twoProng(g: SVGGElement, twoProng: TwoProngForDebugging) {
|
|
|
33
33
|
if (twoProng.failed) {
|
|
34
34
|
$failedDot = drawFs.dot(g, twoProng.pos.p, 1*scaleFactor, 'black');
|
|
35
35
|
} else if (!twoProng.failed) {
|
|
36
|
-
$center = drawFs.dot (g, twoProng.circle.center,
|
|
36
|
+
$center = drawFs.dot (g, twoProng.circle.center, 0.02*scaleFactor, 'yellow');
|
|
37
37
|
$circle = drawFs.circle(g, twoProng.circle, color + 'thin' + thin + ' nofill');
|
|
38
38
|
$cp1 = drawFs.dot (g, twoProng.pos.p, 0.035*scaleFactor, color);
|
|
39
39
|
$cp2 = drawFs.dot (g, twoProng.z, 0.07*scaleFactor, color);
|