From 75884e0d7d73b4a8998882dbba7cbf4b7ec2ff5d Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Wed, 20 Nov 2024 10:09:36 -0500 Subject: [PATCH] split curves on intersections --- src/main.js | 89 +++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/main.js b/src/main.js index 30be141..e3ad3e6 100644 --- a/src/main.js +++ b/src/main.js @@ -644,50 +644,51 @@ class Shape { } } - let epsilon = 0.0001 - // let newCurves = [] - // for (let i=0; i epsilon && t1 < 1-epsilon) { - // let split = remainingCurve.split(t1 / remainingFraction) - // remainingFraction = t1 - // curveBasket.push(split.right) - // remainingCurve = split.left - // } - // if (t2 > epsilon && t2 < 1-epsilon) { - // secondaryIntersects.push(t2) - // } - // } - // curveBasket.reverse() - // for (let curve of curveBasket) { - // newCurves.push(curve) - // } - // curveBasket = [] - // secondaryIntersects.sort() // now sorting with respect to curve 2 - // remainingFraction = 1 - // remainingCurve = this.curves[j] - // for (let t2 of secondaryIntersects) { - // let split = remainingCurve.split(t2 / remainingFraction) - // remainingFraction = t2 - // curveBasket.push(split.right) - // remainingCurve = split.left - // } - // this.curves.splice(j, 1, ...curveBasket) - // } - // } - // } - // this.curves = newCurves + let epsilon = 0.01 + let newCurves = [] + let intersectMap = {} + for (let i=0; i=0; i--) { + if (i in intersectMap) { + intersectMap[i].sort().reverse() + let remainingFraction = 1 + let remainingCurve = this.curves[i] + for (let t of intersectMap[i]) { + let split = remainingCurve.split(t / remainingFraction) + remainingFraction = t + newCurves.push(split.right) + remainingCurve = split.left + } + newCurves.push(remainingCurve) + + } else { + newCurves.push(this.curves[i]) + } + } + newCurves.reverse() + this.curves = newCurves this.recalculateBoundingBox() } draw(context) {