split curves on intersections

This commit is contained in:
Skyler Lehmkuhl 2024-11-20 10:09:36 -05:00
parent af2f499412
commit 75884e0d7d
1 changed files with 45 additions and 44 deletions

View File

@ -644,50 +644,51 @@ class Shape {
} }
} }
let epsilon = 0.0001 let epsilon = 0.01
// let newCurves = [] let newCurves = []
// for (let i=0; i<this.curves.length-1; i++) { let intersectMap = {}
// for (let j=i+1; j<this.curves.length; j++) { for (let i=0; i<this.curves.length-1; i++) {
// let intersects = this.curves[i].intersects(this.curves[j]) for (let j=i+1; j<this.curves.length; j++) {
// if (intersects.length==0) { let intersects = this.curves[i].intersects(this.curves[j])
// newCurves.push(this.curves[i]) console.log(intersects)
// } else { if (intersects.length) {
// intersects.sort().reverse() // with respect to curve 1 intersectMap[i] ||= []
// let secondaryIntersects = [] intersectMap[j] ||= []
// let remainingFraction = 1 for(let intersect of intersects) {
// let remainingCurve = this.curves[i] let [t1, t2] = intersect.split("/")
// let curveBasket = [] intersectMap[i].push(parseFloat(t1))
// for (let intersect of intersects) { intersectMap[j].push(parseFloat(t2))
// let [t1, t2] = intersect.split("/") }
// if (t1 > epsilon && t1 < 1-epsilon) { }
// let split = remainingCurve.split(t1 / remainingFraction) }
// remainingFraction = t1 }
// curveBasket.push(split.right) for (let lst in intersectMap) {
// remainingCurve = split.left for (let i=1; i<intersectMap[lst].length; i++) {
// } if (Math.abs(intersectMap[lst][i] - intersectMap[lst][i-1]) < epsilon) {
// if (t2 > epsilon && t2 < 1-epsilon) { intersectMap[lst].splice(i,1)
// secondaryIntersects.push(t2) i--
// } }
// } }
// curveBasket.reverse() }
// for (let curve of curveBasket) { for (let i=this.curves.length-1; i>=0; i--) {
// newCurves.push(curve) if (i in intersectMap) {
// } intersectMap[i].sort().reverse()
// curveBasket = [] let remainingFraction = 1
// secondaryIntersects.sort() // now sorting with respect to curve 2 let remainingCurve = this.curves[i]
// remainingFraction = 1 for (let t of intersectMap[i]) {
// remainingCurve = this.curves[j] let split = remainingCurve.split(t / remainingFraction)
// for (let t2 of secondaryIntersects) { remainingFraction = t
// let split = remainingCurve.split(t2 / remainingFraction) newCurves.push(split.right)
// remainingFraction = t2 remainingCurve = split.left
// curveBasket.push(split.right) }
// remainingCurve = split.left newCurves.push(remainingCurve)
// }
// this.curves.splice(j, 1, ...curveBasket) } else {
// } newCurves.push(this.curves[i])
// } }
// } }
// this.curves = newCurves newCurves.reverse()
this.curves = newCurves
this.recalculateBoundingBox() this.recalculateBoundingBox()
} }
draw(context) { draw(context) {