@ue-too/curve 0.7.3 → 0.8.0
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/b-curve.d.ts +1 -0
- package/curve.tsbuildinfo +1 -1
- package/index.js +1511 -1562
- package/index.js.map +13 -1
- package/package.json +13 -7
- package/LICENSE.txt +0 -19
package/index.js.map
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/b-curve.ts","../src/line.ts","../src/composite-curve.ts","../src/path.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/b-curve.ts", "../src/line.ts", "../src/composite-curve.ts", "../src/path.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { PointCal } from \"@ue-too/math\";\nimport { Line } from \"./line\";\n\nconst T = [\n -0.0640568928626056260850430826247450385909,\n 0.0640568928626056260850430826247450385909,\n -0.1911188674736163091586398207570696318404,\n 0.1911188674736163091586398207570696318404,\n -0.3150426796961633743867932913198102407864,\n 0.3150426796961633743867932913198102407864,\n -0.4337935076260451384870842319133497124524,\n 0.4337935076260451384870842319133497124524,\n -0.5454214713888395356583756172183723700107,\n 0.5454214713888395356583756172183723700107,\n -0.6480936519369755692524957869107476266696,\n 0.6480936519369755692524957869107476266696,\n -0.7401241915785543642438281030999784255232,\n 0.7401241915785543642438281030999784255232,\n -0.8200019859739029219539498726697452080761,\n 0.8200019859739029219539498726697452080761,\n -0.8864155270044010342131543419821967550873,\n 0.8864155270044010342131543419821967550873,\n -0.9382745520027327585236490017087214496548,\n 0.9382745520027327585236490017087214496548,\n -0.9747285559713094981983919930081690617411,\n 0.9747285559713094981983919930081690617411,\n -0.9951872199970213601799974097007368118745,\n 0.9951872199970213601799974097007368118745,\n];\n\nconst C = [\n 0.1279381953467521569740561652246953718517,\n 0.1279381953467521569740561652246953718517,\n 0.1258374563468282961213753825111836887264,\n 0.1258374563468282961213753825111836887264,\n 0.121670472927803391204463153476262425607,\n 0.121670472927803391204463153476262425607,\n 0.1155056680537256013533444839067835598622,\n 0.1155056680537256013533444839067835598622,\n 0.1074442701159656347825773424466062227946,\n 0.1074442701159656347825773424466062227946,\n 0.0976186521041138882698806644642471544279,\n 0.0976186521041138882698806644642471544279,\n 0.086190161531953275917185202983742667185,\n 0.086190161531953275917185202983742667185,\n 0.0733464814110803057340336152531165181193,\n 0.0733464814110803057340336152531165181193,\n 0.0592985849154367807463677585001085845412,\n 0.0592985849154367807463677585001085845412,\n 0.0442774388174198061686027482113382288593,\n 0.0442774388174198061686027482113382288593,\n 0.0285313886289336631813078159518782864491,\n 0.0285313886289336631813078159518782864491,\n 0.0123412297999871995468056670700372915759,\n 0.0123412297999871995468056670700372915759,\n];\n\ntype ArcLengthLUT = {\n controlPoints: Point[];\n arcLengthLUT: {tVal: number, length: number}[];\n}\n\ntype AdvanceAtTWithLengthWithinCurveRes = {\n type: \"withinCurve\";\n tVal: number;\n point: Point;\n}\n\ntype AdvanceAtWithLengthBeforeCurveRes = {\n type: \"beforeCurve\";\n remainLength: number;\n}\n\ntype AdvanceAtWithLengthAfterCurveRes = {\n type: \"afterCurve\";\n remainLength: number;\n}\n\ntype AdvanceAtTWithLengthOutofCurveRes = AdvanceAtWithLengthBeforeCurveRes | AdvanceAtWithLengthAfterCurveRes;\n\ntype AdvanceAtTWithLengthRes = AdvanceAtTWithLengthWithinCurveRes | AdvanceAtTWithLengthOutofCurveRes;\n\nexport class BCurve{\n\n private controlPoints: Point[];\n private dControlPoints: Point[] = [];\n private arcLengthLUT: ArcLengthLUT = {controlPoints: [], arcLengthLUT: []};\n private _fullLength: number;\n private lengthCache: Map<number, number> = new Map(); // Cache for lengthAtT results\n\n /**\n * Gets cache statistics for performance monitoring\n * @returns Object containing cache size and hit rate information\n */\n public getCacheStats(): {size: number, hitRate: number} {\n return {\n size: this.lengthCache.size,\n hitRate: 0 // This would need to be tracked separately if needed\n };\n }\n\n /**\n * Pre-warms the cache with commonly used t values for better performance\n * @param steps Number of steps to pre-cache (default: 100)\n */\n public preWarmCache(steps: number = 100): void {\n const tSteps = 1 / steps;\n for (let tVal = 0; tVal <= 1; tVal += tSteps) {\n this.lengthAtT(tVal);\n }\n }\n\n private clearCache(): void {\n this.lengthCache.clear();\n }\n\n constructor(controlPoints: Point[]){\n this.controlPoints = controlPoints;\n this.dControlPoints = this.getDerivativeControlPoints(this.controlPoints);\n this._fullLength = this.calculateFullLength();\n // Make arc length LUT lazy - only compute when needed\n this.arcLengthLUT = { controlPoints: [], arcLengthLUT: [] };\n this.clearCache(); // Clear cache on initialization\n }\n\n public getPointbyPercentage(percentage: number){ // this is the percentage of the curve length, not the t value\n // this leaves room for optimization\n let controlPointsChangedSinceLastArcLengthLUT = this.arcLengthLUT.controlPoints.length != this.controlPoints.length;\n controlPointsChangedSinceLastArcLengthLUT = controlPointsChangedSinceLastArcLengthLUT || this.arcLengthLUT.controlPoints.reduce((prevVal, curVal, index)=>{\n return prevVal || !PointCal.isEqual(curVal, this.controlPoints[index]);\n }, false);\n let points: number[] = [];\n if (controlPointsChangedSinceLastArcLengthLUT){\n this.arcLengthLUT = this.getArcLengthLUT(1000);\n }\n points = [...this.arcLengthLUT.arcLengthLUT.map((item)=>item.length)];\n let targetLength = percentage * this.fullLength;\n let low = 0;\n let high = points.length - 1;\n while (low <= high){\n let mid = Math.floor((low + high) / 2);\n if (points[mid] == targetLength){\n return this.get((mid + 1) / points.length);\n } else if (points[mid] < targetLength){\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n return low >= points.length ? this.get(1) : this.get((low + 1) / points.length);\n }\n\n public getDerivativeControlPoints(controlPoints: Point[]): Point[]{\n const derivativeControlPoints: Point[] = [];\n for(let index = 1; index < controlPoints.length; index++){\n derivativeControlPoints.push(PointCal.multiplyVectorByScalar(PointCal.subVector(controlPoints[index], controlPoints[index - 1]), controlPoints.length - 1));\n }\n return derivativeControlPoints;\n }\n\n private validateTVal(tVal: number){\n if (tVal > 1 || tVal < 0){\n throw new TValOutofBoundError(\"tVal is greater than 1 or less than 0\");\n }\n }\n\n public getControlPoints(): Point[]{\n return this.controlPoints;\n }\n\n setControlPoints(controlPoints: Point[]){\n this.controlPoints = controlPoints;\n this.dControlPoints = this.getDerivativeControlPoints(this.controlPoints);\n this._fullLength = this.calculateFullLength();\n // Reset LUT to trigger lazy computation when needed\n this.arcLengthLUT = { controlPoints: [], arcLengthLUT: [] };\n this.clearCache(); // Clear cache on control point change\n }\n\n setControlPointAtIndex(index: number, newPoint: Point): boolean{\n if (index < 0 || index >= this.controlPoints.length){\n return false;\n }\n this.controlPoints[index] = newPoint;\n this.dControlPoints = this.getDerivativeControlPoints(this.controlPoints);\n this._fullLength = this.calculateFullLength();\n // Reset LUT to trigger lazy computation when needed\n this.arcLengthLUT = { controlPoints: [], arcLengthLUT: [] };\n this.clearCache(); // Clear cache on control point change\n return true;\n }\n\n public compute(tVal: number): Point{\n this.validateTVal(tVal);\n let points = this.controlPoints;\n while (points.length > 1) {\n let lowerLevelPoints = points.slice(1);\n for(let index = 0; index < lowerLevelPoints.length; index++){\n lowerLevelPoints[index] = PointCal.addVector(PointCal.multiplyVectorByScalar(points[index], (1 - tVal)), PointCal.multiplyVectorByScalar(points[index + 1], tVal));\n }\n points = lowerLevelPoints;\n }\n return points[0];\n }\n\n public get(tVal: number): Point {\n this.validateTVal(tVal);\n if (this.controlPoints.length == 3) {\n let firstTerm = PointCal.multiplyVectorByScalar(this.controlPoints[0], (1 - tVal) * (1 - tVal));\n let secondTerm = PointCal.multiplyVectorByScalar(this.controlPoints[1], 2 * (1 - tVal) * tVal);\n let thirdTerm = PointCal.multiplyVectorByScalar(this.controlPoints[2], tVal * tVal);\n let res = PointCal.addVector(PointCal.addVector(firstTerm, secondTerm), thirdTerm);\n return res;\n }\n if (this.controlPoints.length == 4){\n let firstTerm = PointCal.multiplyVectorByScalar(this.controlPoints[0], (1 - tVal) * (1 - tVal) * (1 - tVal));\n let secondTerm = PointCal.multiplyVectorByScalar(this.controlPoints[1], 3 * (1 - tVal) * (1 - tVal) * tVal);\n let thirdTerm = PointCal.multiplyVectorByScalar(this.controlPoints[2], 3 * (1 - tVal) * tVal * tVal);\n let forthTerm = PointCal.multiplyVectorByScalar(this.controlPoints[3], tVal * tVal * tVal);\n let res = PointCal.addVector(PointCal.addVector(firstTerm, secondTerm), PointCal.addVector(thirdTerm, forthTerm));\n return res;\n }\n return this.compute(tVal);\n }\n\n public getLUT(steps: number = 100){\n const stepSpan = 1 / steps;\n const res: Point[] = [];\n let tVal = 0;\n res.push(this.get(tVal));\n for(let index = 0; index < steps; index += 1){\n tVal += stepSpan;\n if((tVal > 1 && tVal - stepSpan < 1) || index == steps - 1){\n tVal = 1;\n }\n res.push(this.get(tVal));\n }\n return res\n }\n\n public getLUTWithTVal(steps?: number){\n if (steps == undefined){\n steps = 100;\n }\n const stepSpan = 1 / steps;\n const res: {point: Point, tVal: number}[] = [];\n let tVal = 0;\n res.push({point: this.get(tVal), tVal: tVal});\n for(let index = 0; index < steps; index += 1){\n tVal += stepSpan;\n if((tVal > 1 && tVal - stepSpan < 1) || index == steps - 1){\n tVal = 1;\n }\n res.push({point: this.get(tVal), tVal: tVal});\n }\n return res\n }\n\n get fullLength(): number{\n return this._fullLength;\n }\n\n private calculateFullLength(): number{\n return this.lengthAtT(1);\n }\n\n public lengthAtT(tVal: number): number{\n this.validateTVal(tVal);\n \n // Check cache first\n const cacheKey = Math.round(tVal * 1000000) / 1000000; // Round to 6 decimal places for cache key\n if (this.lengthCache.has(cacheKey)) {\n return this.lengthCache.get(cacheKey)!;\n }\n \n const z = tVal / 2, len = T.length;\n let sum = 0;\n for (let i = 0, t: number; i < len; i++) {\n t = z * T[i] + z;\n sum += C[i] * PointCal.magnitude(this.derivative(t));\n }\n const result = z * sum;\n \n // Cache the result\n this.lengthCache.set(cacheKey, result);\n \n return result;\n }\n\n public derivative(tVal: number): Point{\n return computeWithControlPoints(tVal, this.dControlPoints);\n }\n\n public derivativeNormalized(tVal: number): Point{\n return PointCal.unitVector(computeWithControlPoints(tVal, this.dControlPoints));\n }\n\n public getArcLengthLUT(steps: number = 50): {controlPoints: Point[], arcLengthLUT: {tVal: number, length: number}[]}{\n // Check if we need to recompute the LUT\n const controlPointsChanged = this.arcLengthLUT.controlPoints.length !== this.controlPoints.length ||\n this.arcLengthLUT.controlPoints.some((cp, index) => !PointCal.isEqual(cp, this.controlPoints[index]));\n \n if (controlPointsChanged || this.arcLengthLUT.arcLengthLUT.length === 0) {\n // Clear cache when regenerating LUT to ensure consistency\n this.clearCache();\n \n let res = [];\n let tSteps = 1 / steps;\n for(let tVal = 0; tVal <= 1; tVal += tSteps){\n res.push({tVal: tVal, length: this.lengthAtT(tVal)});\n }\n this.arcLengthLUT = {controlPoints: [...this.controlPoints], arcLengthLUT: res};\n }\n \n return this.arcLengthLUT;\n }\n\n splitIntoCurves(tVal: number): [BCurve, BCurve]{\n const res = this.split(tVal);\n return [new BCurve(res[0]), new BCurve(res[1])];\n }\n\n public split(tVal: number): [Point[], Point[]]{\n this.validateTVal(tVal);\n if (this.controlPoints.length == 3){\n let newControlPoint1 = this.controlPoints[0];\n let newControlPoint2 = PointCal.subVector(PointCal.multiplyVectorByScalar(this.controlPoints[1], tVal), PointCal.multiplyVectorByScalar(this.controlPoints[0], tVal - 1));\n let newControlPoint3 = PointCal.subVector(PointCal.multiplyVectorByScalar(this.controlPoints[2], tVal * tVal), PointCal.multiplyVectorByScalar(this.controlPoints[1], 2 * tVal * (tVal - 1)));\n newControlPoint3 = PointCal.addVector(newControlPoint3, PointCal.multiplyVectorByScalar(this.controlPoints[0], (tVal - 1) * (tVal - 1)));\n let newControlPoint4 = PointCal.subVector(PointCal.multiplyVectorByScalar(this.controlPoints[2], tVal), PointCal.multiplyVectorByScalar(this.controlPoints[1], tVal - 1));\n let newControlPoint5 = this.controlPoints[2];\n return [[newControlPoint1, newControlPoint2, newControlPoint3], [newControlPoint3, newControlPoint4, newControlPoint5]];\n }\n let newControlPoint1 = this.controlPoints[0];\n let newControlPoint2 = PointCal.subVector(PointCal.multiplyVectorByScalar(this.controlPoints[1], tVal), PointCal.multiplyVectorByScalar(this.controlPoints[0], (tVal - 1)));\n let newControlPoint3 = PointCal.addVector(PointCal.multiplyVectorByScalar(this.controlPoints[2], tVal * tVal), PointCal.addVector(PointCal.multiplyVectorByScalar(this.controlPoints[1], -(2 * tVal * (tVal - 1))), PointCal.multiplyVectorByScalar(this.controlPoints[0], (tVal - 1) * (tVal - 1))));\n let term1 = PointCal.multiplyVectorByScalar(this.controlPoints[3], tVal * tVal * tVal);\n let term2 = PointCal.multiplyVectorByScalar(this.controlPoints[2], -(3 * tVal * tVal * (tVal - 1)));\n let term3 = PointCal.multiplyVectorByScalar(this.controlPoints[1], 3 * tVal * (tVal - 1) * (tVal - 1));\n let term4 = PointCal.multiplyVectorByScalar(this.controlPoints[0], -((tVal - 1) * (tVal - 1) * (tVal - 1)));\n let newControlPoint4 = PointCal.addVector(term4, PointCal.addVector(term3, PointCal.addVector(term1, term2)));\n let newControlPoint5 = PointCal.addVector(PointCal.addVector(PointCal.multiplyVectorByScalar(this.controlPoints[3], tVal * tVal), PointCal.multiplyVectorByScalar(this.controlPoints[2], -(2 * tVal * (tVal - 1)))), PointCal.multiplyVectorByScalar(this.controlPoints[1], (tVal - 1) * (tVal - 1)));\n let newControlPoint6 = PointCal.addVector(PointCal.multiplyVectorByScalar(this.controlPoints[3], tVal), PointCal.multiplyVectorByScalar(this.controlPoints[2], -(tVal - 1)));\n let newControlPoint7 = this.controlPoints[3];\n\n return [[newControlPoint1, newControlPoint2, newControlPoint3, newControlPoint4], [newControlPoint4, newControlPoint5, newControlPoint6, newControlPoint7]];\n }\n\n splitIn3WithControlPoints(tVal: number, tVal2: number): [Point[], Point[], Point[]]{\n if(tVal2 < tVal){\n console.warn(\"tVal2 is less than tVal, swapping them\");\n [tVal, tVal2] = [tVal2, tVal];\n }\n\n const firstSplit = this.split(tVal);\n\n const secondHalf = new BCurve(firstSplit[1]);\n\n const mappedTVal2 = map(tVal2, tVal, 1, 0, 1);\n \n const secondSplit = secondHalf.split(mappedTVal2);\n\n return [firstSplit[0], secondSplit[0], secondSplit[1]];\n }\n\n splitIn3Curves(tVal: number, tVal2: number): [BCurve, BCurve, BCurve]{\n if(tVal2 < tVal){\n console.warn(\"tVal2 is less than tVal, swapping them\");\n [tVal, tVal2] = [tVal2, tVal];\n }\n\n const firstSplit = this.split(tVal);\n\n const secondHalf = new BCurve(firstSplit[1]);\n \n const mappedTVal2 = map(tVal2, tVal, 1, 0, 1);\n const secondSplit = secondHalf.split(mappedTVal2);\n\n return [new BCurve(firstSplit[0]), new BCurve(secondSplit[0]), new BCurve(secondSplit[1])];\n }\n\n splitAndTakeMidCurve(tVal: number, tVal2: number): BCurve{\n const [firstSplit, secondSplit, thirdSplit] = this.splitIn3Curves(tVal, tVal2);\n return secondSplit;\n }\n\n getProjection(point: Point){\n const threshold = 0.00001;\n let distance = Number.MAX_VALUE;\n let preliminaryProjectionTVal: number = 0;\n let preliminaryProjectionPoint: Point = this.get(0);\n let preliminaryProjectionIndex: number = 0;\n const LUT = this.getLUTWithTVal(500);\n LUT.forEach((curvePoint, index)=>{\n const curDistance = PointCal.distanceBetweenPoints(curvePoint.point, point);\n if(curDistance < distance){\n distance = curDistance;\n preliminaryProjectionPoint = {...curvePoint.point};\n preliminaryProjectionTVal = curvePoint.tVal;\n preliminaryProjectionIndex = index;\n }\n });\n // console.log(preliminaryProjectionIndex, preliminaryProjectionPoint, preliminaryProjectionTVal);\n let low = LUT[preliminaryProjectionIndex].tVal;\n let high = LUT[preliminaryProjectionIndex].tVal;\n if (preliminaryProjectionIndex < LUT.length - 1){\n high = LUT[preliminaryProjectionIndex + 1].tVal;\n }\n if (preliminaryProjectionIndex > 0){\n low = LUT[preliminaryProjectionIndex - 1].tVal;\n }\n while(low < high && high - low > threshold){\n let mid = low + (high - low) / 2;\n let halfSpan = mid - low;\n let lowMidMid = mid + halfSpan / 2;\n let highMidMid = mid + halfSpan / 2;\n let prevDist = distance;\n\n \n if(lowMidMid <= 1 && lowMidMid >= 0){\n let curDist = PointCal.distanceBetweenPoints(this.get(lowMidMid), point);\n if (curDist < distance){\n distance = curDist;\n preliminaryProjectionPoint = this.get(lowMidMid);\n preliminaryProjectionTVal = lowMidMid;\n high = lowMidMid + halfSpan / 2;\n low = lowMidMid - halfSpan / 2;\n }\n }\n if(highMidMid <= 1 && highMidMid >= 0){\n let curDist = PointCal.distanceBetweenPoints(this.get(highMidMid), point);\n if (curDist < distance){\n distance = curDist;\n preliminaryProjectionPoint = this.get(highMidMid);\n preliminaryProjectionTVal = highMidMid;\n high = highMidMid + halfSpan / 2;\n low = highMidMid - halfSpan / 2;\n }\n }\n if (prevDist == distance){\n break;\n }\n }\n return {projection: preliminaryProjectionPoint, tVal: preliminaryProjectionTVal};\n }\n\n public findArcs(errorThreshold: number){\n let low = 0;\n const res: {center: Point, radius: number, startPoint: Point, startT: number, endPoint: Point, endT: number}[] = [];\n\n while (low < 1){\n let loopRes = this.findArcStartingAt(errorThreshold, low);\n if (loopRes == null || loopRes.arc == undefined) {\n break;\n }\n res.push(loopRes.arc);\n low = loopRes.arc.endT;\n if(low >= 1){\n break;\n }\n }\n return res;\n }\n\n public findArcStartingAt(errorThreshold: number, low: number){\n let high = 1;\n let mid = low + (high - low) / 2;\n let prevArc:{good: boolean, arc?: {center: Point, radius: number, startPoint: Point, endPoint: Point, startT: number, endT: number}} = {good: false};\n let count = 0;\n while(true){\n count++;\n mid = low + (high - low) / 2;\n if (high > 1 || mid > 1){\n if (prevArc.good){\n return prevArc;\n } else {\n return null;\n }\n \n }\n const lowPoint = this.get(low);\n const highPoint = this.get(high);\n const midPoint = this.get(mid);\n const fitArcRes = this.fitArc(lowPoint, highPoint, midPoint);\n if (!fitArcRes.exists || fitArcRes.center == null || fitArcRes.radius == null){\n return null;\n }\n const n = high - mid;\n const e1 = mid - n / 2;\n const e2 = mid + n / 2;\n const checkPoint1 = this.get(e1);\n const checkPoint2 = this.get(e2);\n const checkRadius = PointCal.distanceBetweenPoints(checkPoint1, fitArcRes.center);\n const checkRadius2 = PointCal.distanceBetweenPoints(checkPoint2, fitArcRes.center);\n if (Math.abs(checkRadius - fitArcRes.radius) > errorThreshold || Math.abs(checkRadius2 - fitArcRes.radius) > errorThreshold){\n // arc is bad\n if (prevArc.good == true){\n return prevArc;\n }\n prevArc.good = false;\n high = mid\n } else {\n prevArc.good = true;\n if (fitArcRes.startPoint !== undefined && fitArcRes.endPoint !== undefined){\n prevArc.arc = { center: fitArcRes.center, radius: fitArcRes.radius, startPoint: fitArcRes.startPoint, endPoint: fitArcRes.endPoint, startT: low, endT: high};\n }\n high = high + (mid - low);\n }\n }\n }\n\n public fitArc(startPoint: Point, endPoint: Point, midPoint: Point): {exists: boolean, center?: Point, radius?: number, startPoint?: Point, endPoint?: Point}{\n const M11 = [[startPoint.x, startPoint.y, 1], [midPoint.x, midPoint.y, 1], [endPoint.x, endPoint.y, 1]];\n if (this.determinant3by3(M11) == 0) {\n // three points lie on a line no circle\n return {exists: false};\n }\n const M12 = [[startPoint.x * startPoint.x + startPoint.y * startPoint.y, startPoint.y, 1], \n [midPoint.x * midPoint.x + midPoint.y * midPoint.y, midPoint.y, 1],\n [endPoint.x * endPoint.x + endPoint.y * endPoint.y, endPoint.y, 1]];\n const M13 = [[startPoint.x * startPoint.x + startPoint.y * startPoint.y, startPoint.x, 1],\n [midPoint.x * midPoint.x + midPoint.y * midPoint.y, midPoint.x, 1],\n [endPoint.x * endPoint.x + endPoint.y * endPoint.y, endPoint.x, 1]];\n const M14 = [[startPoint.x * startPoint.x + startPoint.y * startPoint.y, startPoint.x, startPoint.y],\n [midPoint.x * midPoint.x + midPoint.y * midPoint.y, midPoint.x, midPoint.y],\n [endPoint.x * endPoint.x + endPoint.y * endPoint.y, endPoint.x, endPoint.y]]\n const centerX = (1 / 2) * (this.determinant3by3(M12) / this.determinant3by3(M11));\n const centerY = (-1 / 2) * (this.determinant3by3(M13) / this.determinant3by3(M11));\n const radius = Math.sqrt(centerX * centerX + centerY * centerY + (this.determinant3by3(M14) / this.determinant3by3(M11)))\n return {exists: true, center: {x: centerX, y:centerY}, radius: radius, startPoint: startPoint, endPoint: endPoint};\n }\n\n public determinant3by3(matrix: number[][]): number{\n const a = matrix[0][0];\n const b = matrix[0][1];\n const c = matrix[0][2];\n const d = matrix[1][0];\n const e = matrix[1][1];\n const f = matrix[1][2];\n const g = matrix[2][0];\n const h = matrix[2][1];\n const i = matrix[2][2];\n return a * (e * i - f * h) - b * (d * i - g * f) + c * (d * h - e * g);\n }\n\n public curvature(tVal: number): number{\n const derivative = computeWithControlPoints(tVal, this.dControlPoints);\n const secondDerivative = computeWithControlPoints(tVal, this.getDerivativeControlPoints(this.dControlPoints));\n const numerator = derivative.x * secondDerivative.y - secondDerivative.x * derivative.y;\n const denominator = Math.pow(derivative.x * derivative.x + derivative.y * derivative.y, 3 / 2);\n if (denominator == 0) return NaN;\n return numerator / denominator;\n }\n\n secondDerivative(tVal: number): Point{\n return computeWithControlPoints(tVal, this.getDerivativeControlPoints(this.dControlPoints));\n }\n\n public getCoefficientOfTTerms(): Point[]{\n return this.getCoefficientOfTTermsWithControlPoints(this.controlPoints);\n }\n\n public getDerivativeCoefficients(): Point[]{\n return this.getCoefficientOfTTermsWithControlPoints(this.dControlPoints);\n }\n\n public getCoefficientOfTTermsWithControlPoints(controlPoints: Point[]): Point[]{\n const terms: Point[] = [];\n let matrix: number[][] = [];\n if(controlPoints.length == 3){\n matrix = [[1, 0, 0], [-2, 2, 0], [1, -2, 1]];\n } else if (controlPoints.length == 4){\n matrix = [[1, 0, 0, 0], [-3, 3, 0, 0], [3, -6, 3, 0], [-1, 3, -3, 1]];\n } else if(controlPoints.length == 2){\n matrix = [[1, 0], [-1, 1]];\n } \n else {\n throw new Error(\"number of control points is wrong\");\n }\n for(let index = 0; index < controlPoints.length; index++){\n terms.push(controlPoints.reduce((prevVal, curVal, jindex)=>{\n return {x: prevVal.x + matrix[index][jindex] * curVal.x, y: prevVal.y + matrix[index][jindex] * curVal.y};\n }, {x: 0, y: 0}));\n }\n return terms;\n }\n\n getControlPointsAlignedWithXAxis(){\n const alignedAxis = PointCal.unitVectorFromA2B(this.controlPoints[0], this.controlPoints[this.controlPoints.length - 1]);\n const angle = PointCal.angleFromA2B({x:1, y:0}, alignedAxis);\n const startingPoint = this.controlPoints[0];\n const res = [{x: 0, y: 0}];\n for(let index = 1; index < this.controlPoints.length; index++){\n const vector = PointCal.subVector(this.controlPoints[index], startingPoint);\n const rotatedVector = PointCal.rotatePoint(vector, -angle);\n res.push(rotatedVector);\n }\n return res;\n }\n\n getExtrema():{x: number[], y: number[]}{\n const res: {x: number[], y: number[]} = {x: [], y: []};\n const derivativeCoefficients = this.getDerivativeCoefficients();\n let xCoefficients = [0, 0, 0, 0];\n let yCoefficients = [0, 0, 0, 0];\n derivativeCoefficients.forEach((coefficient, index)=>{\n xCoefficients[3 - index] = coefficient.x;\n yCoefficients[3 - index] = coefficient.y;\n });\n\n const xRoots = solveCubic(xCoefficients[0], xCoefficients[1], xCoefficients[2], xCoefficients[3]);\n const yRoots = solveCubic(yCoefficients[0], yCoefficients[1], yCoefficients[2], yCoefficients[3]);\n xRoots.forEach((root)=>{\n if(root >= 0 && root <= 1){\n res.x.push(root);\n }\n });\n yRoots.forEach((root)=>{\n if(root >= 0 && root <= 1){\n res.y.push(root);\n }\n });\n \n if(derivativeCoefficients.length >= 3){\n xCoefficients = [0, 0, 0, 0];\n yCoefficients = [0, 0, 0, 0];\n const secondDerivativeCoefficients = this.getCoefficientOfTTermsWithControlPoints(this.getDerivativeControlPoints(this.dControlPoints));\n secondDerivativeCoefficients.forEach((coefficient, index)=>{\n xCoefficients[3 - index] = coefficient.x;\n yCoefficients[3 - index] = coefficient.y;\n })\n const secondXRoots = solveCubic(xCoefficients[0], xCoefficients[1], xCoefficients[2], xCoefficients[3]);\n const secondYRoots = solveCubic(yCoefficients[0], yCoefficients[1], yCoefficients[2], yCoefficients[3]);\n secondXRoots.forEach((root)=>{\n if(root >= 0 && root <= 1){\n res.x.push(root);\n }\n });\n secondYRoots.forEach((root)=>{\n if(root >= 0 && root <= 1){\n res.y.push(root);\n }\n });\n\n }\n return res; \n }\n\n translateRotateControlPoints(translation: Point, rotationAngle: number){\n // rotation is in radians\n const res: Point[] = [];\n for(let index = 0; index < this.controlPoints.length; index++){\n res.push(PointCal.rotatePoint(PointCal.addVector(this.controlPoints[index], translation), rotationAngle));\n }\n return res;\n }\n\n getLineIntersections(line: Line): number[]{\n const translationRotation = line.getTranslationRotationToAlginXAxis();\n const res: number[] = [];\n const alignedControlPoints = this.translateRotateControlPoints(translationRotation.translation, translationRotation.rotationAngle);\n const coefficients = this.getCoefficientOfTTermsWithControlPoints(alignedControlPoints);\n let yCoefficients = [0, 0, 0, 0];\n coefficients.forEach((coefficient, index)=>{\n yCoefficients[3 - index] = coefficient.y;\n });\n\n const yRoots = solveCubic(yCoefficients[0], yCoefficients[1], yCoefficients[2], yCoefficients[3]);\n yRoots.forEach((root)=>{\n if(root >= 0 && root <= 1){\n if(line.pointInLine(this.get(root))){\n res.push(root);\n }\n }\n });\n\n return res;\n }\n\n getSelfIntersections(): {selfT: number, otherT: number}[]{\n const [subCurveControlPoints1, subCurveControlPoints2] = this.split(0.5);\n const subCurve1 = new BCurve(subCurveControlPoints1);\n const subCurve2 = new BCurve(subCurveControlPoints2);\n let initialRes = getIntersectionsBetweenCurves(subCurve1, subCurve2);\n initialRes.forEach((intersection)=>{\n intersection.selfT = intersection.selfT * 0.5;\n intersection.otherT = intersection.otherT * 0.5 + 0.5;\n });\n initialRes.shift();\n return initialRes;\n }\n\n getCircleIntersections(circleCenter: Point, circleRadius: number): {intersection: Point, tVal: number}[]{\n const LUT = this.getLUTWithTVal(500);\n let distanceError = Number.MAX_VALUE;\n let preliminaryIntersectionIndex = 0;\n let preliminaryIntersectionPoint: Point = LUT[0].point;\n let preliminaryIntersectionTVal = LUT[0].tVal;\n LUT.forEach((curvePoint, index)=>{\n let curDistanceError = Math.abs(PointCal.distanceBetweenPoints(circleCenter, curvePoint.point));\n if (curDistanceError < distanceError){\n distanceError = curDistanceError;\n preliminaryIntersectionIndex = index;\n }\n });\n const LUTD = LUT.map((curvePoint, index)=>{\n return {...curvePoint, distance: 0};\n })\n distanceError = Number.MAX_VALUE;\n let start = 0;\n let count = 0;\n let indices: number[] = [];\n while(++count < 25){\n let i = this.findClosest(circleCenter.x, circleCenter.y, LUTD, circleRadius, 5, LUTD[start - 2]?.distance, LUTD[start - 1]?.distance);\n if (i < start) break;\n if (i > 0 && i == start) break;\n indices.push(i);\n start = i + 2;\n }\n const finalList: {intersection: Point, tVal: number}[] = [];\n indices.forEach((index)=>{\n let res = this.refineBinary(this, circleCenter.x, circleCenter.y, LUTD, index, circleRadius);\n if (res != undefined){\n finalList.push({intersection: res.point, tVal: res.tVal});\n }\n })\n return finalList;\n }\n\n advanceAtTWithLength(tVal: number, length: number): AdvanceAtTWithLengthRes{\n const currentLength = this.lengthAtT(tVal);\n const targetLength = currentLength + length;\n \n // Handle edge cases first\n if(tVal === 0 && length < 0){\n return {type: \"beforeCurve\", remainLength: -length};\n }\n if(tVal === 1 && length > 0){\n return {type: \"afterCurve\", remainLength: length};\n }\n if(targetLength > this.fullLength){\n return {type: \"afterCurve\", remainLength: targetLength - this.fullLength};\n } else if(targetLength < 0){\n return {type: \"beforeCurve\", remainLength: -targetLength};\n }\n\n // Use LUT for binary search\n if(this.arcLengthLUT.arcLengthLUT.length === 0){\n this.arcLengthLUT = this.getArcLengthLUT(1000);\n }\n const points = this.arcLengthLUT.arcLengthLUT;\n let low = 0;\n let high = points.length - 1;\n \n // Binary search to find the interval containing targetLength\n while (low <= high){\n const mid = Math.floor((low + high) / 2);\n const midLength = points[mid].length;\n \n if (approximately(midLength, targetLength, 0.01)) {\n // Found exact match\n const resultTVal = points[mid].tVal;\n const point = this.get(resultTVal);\n return {type: \"withinCurve\", tVal: resultTVal, point: point};\n } else if (midLength < targetLength){\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n \n // After binary search, 'high' points to the largest index with length < targetLength\n // and 'low' points to the smallest index with length >= targetLength\n \n // Handle edge cases\n if (high < 0) {\n // targetLength is smaller than the first point's length\n high = 1;\n low = 0;\n }\n \n if (low >= points.length) {\n // targetLength is larger than the last point's length\n high = points.length - 1;\n low = points.length - 2;\n }\n \n // Interpolate between points[high] and points[low]\n const p1 = points[high];\n const p2 = points[low];\n \n // Linear interpolation\n const lengthRange = p2.length - p1.length;\n const tRange = p2.tVal - p1.tVal;\n \n if (lengthRange === 0) {\n // Both points have the same length, use the first one\n const point = this.get(p1.tVal);\n return {type: \"withinCurve\", tVal: p1.tVal, point: point};\n }\n \n const ratio = (targetLength - p1.length) / lengthRange;\n const interpolatedT = p1.tVal + ratio * tRange;\n \n // Clamp to valid range\n const clampedT = Math.max(0, Math.min(1, interpolatedT));\n const point = this.get(clampedT);\n \n return {type: \"withinCurve\", tVal: clampedT, point: point};\n }\n\n advanceByDistance(startT: number, distance: number): AdvanceAtTWithLengthRes {\n let currentT = startT;\n let remainingDistance = distance;\n const stepSize = 0.01; // Adjust for precision vs performance\n\n if(distance > this.fullLength){\n return {type: \"afterCurve\", remainLength: distance - this.fullLength};\n } else if(distance < 0){\n return {type: \"beforeCurve\", remainLength: -distance};\n }\n \n while (remainingDistance > 0 && currentT < 1) {\n const currentPoint = this.get(currentT);\n const nextT = Math.min(currentT + stepSize, 1);\n const nextPoint = this.get(nextT);\n \n const segmentLength = Math.sqrt(\n Math.pow(nextPoint.x - currentPoint.x, 2) + \n Math.pow(nextPoint.y - currentPoint.y, 2)\n );\n \n if (segmentLength >= remainingDistance) {\n // Interpolate within this segment\n const ratio = remainingDistance / segmentLength;\n return {type: \"withinCurve\", tVal: currentT + ratio * (nextT - currentT), point: this.get(currentT + ratio * (nextT - currentT))};\n }\n \n remainingDistance -= segmentLength;\n currentT = nextT;\n }\n \n return {type: \"withinCurve\", tVal: currentT, point: this.get(currentT)};\n }\n\n refineBinary(curve: BCurve, x: number, y: number, LUT: {point: Point, tVal: number, distance: number}[], i: number, targetDistance=0, epsilon=0.01) {\n let q: {point: Point, tVal: number, distance: number} | undefined = LUT[i],\n count = 1,\n distance = Number.MAX_SAFE_INTEGER;\n \n do {\n let i1 = i === 0 ? 0 : i - 1,\n i2 = i === LUT.length - 1 ? LUT.length - 1 : i + 1,\n t1 = LUT[i1].tVal,\n t2 = LUT[i2].tVal,\n lut: {point: Point, tVal: number, distance: number}[] = [],\n step = (t2 - t1) / 4;\n \n if (step < 0.001) break;\n \n lut.push(LUT[i1]);\n for (let j = 1; j <= 3; j++) {\n let n = curve.get(t1 + j * step);\n let nDistance = Math.abs(PointCal.distanceBetweenPoints(n, {x: x, y: y}) - targetDistance);\n if (nDistance < distance) {\n distance = nDistance;\n q = {point: n, tVal: t1 + j * step, distance: nDistance};\n i = j;\n }\n lut.push({point: n, tVal: t1 + j * step, distance: nDistance});\n }\n lut.push(LUT[i2]);\n \n // update the LUT to be our new five point LUT, and run again.\n LUT = lut;\n \n // The \"count\" test is mostly a safety measure: it will\n // never kick in, but something that _will_ terminate is\n // always better than while(true). Never use while(true)\n } while (count++ < 25);\n \n // If we're trying to hit a target, discard the result if\n // it is not close enough to the target.\n if (targetDistance && distance > epsilon) {\n q = undefined;\n }\n \n return q;\n }\n\n findClosest(x: number, y: number, LUT: {point: Point, tVal: number, distance: number}[], circleRadius: number, distanceEpsilon = 5, pd2?: number, pd1?: number) {\n let distance = Number.MAX_SAFE_INTEGER,\n prevDistance2 = pd2 || distance,\n prevDistance1 = pd1 || distance,\n i = -1;\n \n for (let index=0, e=LUT.length; index<e; index++){\n let p = LUT[index].point;\n LUT[index].distance = Math.abs(PointCal.distanceBetweenPoints({x:x, y:y}, p) - circleRadius);\n \n // Realistically, there's only going to be an intersection if\n // the distance to the circle center is already approximately\n // the circle's radius.\n if (prevDistance1 < distanceEpsilon && prevDistance2 > prevDistance1 && prevDistance1 < LUT[index].distance) {\n i = index - 1;\n break;\n }\n \n if (LUT[index].distance < distance) {\n distance = LUT[index].distance;\n }\n \n prevDistance2 = prevDistance1;\n prevDistance1 = LUT[index].distance;\n }\n \n return i;\n }\n\n getCurveIntersections(curve: BCurve, deduplicationTolerance?: number): {selfT: number, otherT: number}[]{\n return getIntersectionsBetweenCurves(this, curve, deduplicationTolerance);\n }\n\n get AABB():{min: Point, max: Point}{\n const extrema = this.getExtrema();\n const tVals = [0, 1];\n let min: Point = {x: Number.MAX_VALUE, y: Number.MAX_VALUE};\n let max: Point = {x: -Number.MAX_VALUE, y: -Number.MAX_VALUE};\n extrema.x.forEach((tVal)=>{\n tVals.push(tVal);\n });\n extrema.y.forEach((tVal)=>{\n tVals.push(tVal);\n });\n tVals.forEach((tVal)=>{\n const curPoint = this.get(tVal);\n min.x = Math.min(min.x, curPoint.x);\n min.y = Math.min(min.y, curPoint.y);\n max.x = Math.max(max.x, curPoint.x);\n max.y = Math.max(max.y, curPoint.y);\n });\n\n return {min:min, max:max};\n }\n\n normal(tVal: number): {tVal: number, direction: Point} {\n const d = this.derivative(tVal);\n const q = Math.sqrt(d.x * d.x + d.y * d.y);\n return {tVal, direction: {x: -d.y / q, y: d.x / q}};\n }\n}\n\nexport function reduce(curve: BCurve) {\n let i: number,\n t1 = 0,\n t2 = 0,\n step = 0.01,\n segment: BCurve,\n pass1: BCurve[] = [],\n pass2: BCurve[] = [];\n \n // first pass: split on extrema\n let extrema = curve.getExtrema().x;\n if (extrema.indexOf(0) === -1) {\n extrema = [0].concat(extrema);\n }\n if (extrema.indexOf(1) === -1) {\n extrema.push(1);\n }\n for (t1 = extrema[0], i = 1; i < extrema.length; i++) {\n t2 = extrema[i];\n segment = curve.splitAndTakeMidCurve(t1, t2);\n pass1.push(segment);\n t1 = t2;\n }\n \n // second pass: further reduce these segments to simple segments\n pass1.forEach(p1 => {\n t1 = 0;\n t2 = 0;\n while (t2 <= 1) {\n for (t2 = t1 + step; t2 <= 1 + step; t2 += step) {\n // Clamp t2 to valid range\n const clampedT2 = Math.min(t2, 1);\n segment = p1.splitAndTakeMidCurve(t1, clampedT2);\n if (!curveIsSimple(segment)) {\n t2 -= step;\n if (Math.abs(t1 - t2) < step) {\n // we can never form a reduction\n return [];\n }\n const finalT2 = Math.min(t2, 1);\n segment = p1.splitAndTakeMidCurve(t1, finalT2);\n pass2.push(segment);\n t1 = finalT2;\n break;\n }\n }\n }\n if (t1 < 1) {\n segment = p1.splitAndTakeMidCurve(t1, 1);\n pass2.push(segment);\n }\n });\n \n return pass2;\n}\n\nfunction raiseCurveOrder(curve: BCurve): BCurve {\n const p = curve.getControlPoints(),\n np = [p[0]],\n k = p.length;\n for (let i = 1; i < k; i++) {\n const pi = p[i];\n const pim = p[i - 1];\n np[i] = {\n x: ((k - i) / k) * pi.x + (i / k) * pim.x,\n y: ((k - i) / k) * pi.y + (i / k) * pim.y,\n };\n }\n np[k] = p[k - 1];\n return new BCurve(np);\n}\n\n// Function overloads for different return types\nexport function offset(curve: BCurve, t: number): BCurve[];\nexport function offset(curve: BCurve, t: number, d: number): {c: Point, n: Point, x: number, y: number};\nexport function offset(curve: BCurve, t: number, d?: number | undefined) {\n if (d !== undefined) {\n const c = curve.get(t),\n n = curve.normal(t).direction;\n const ret = {\n c: c,\n n: n,\n x: c.x + n.x * d,\n y: c.y + n.y * d,\n };\n // if (this._3d) {\n // ret.z = c.z + n.z * d;\n // }\n return ret;\n }\n\n // Native offset implementation based on bezier-js algorithm\n const points = curve.getControlPoints();\n const linear = curveIsLinear(curve);\n\n if (linear) {\n const nv = curve.normal(0).direction,\n coords = points.map(function (p) {\n const ret = {\n x: p.x + t * nv.x,\n y: p.y + t * nv.y,\n };\n return ret;\n });\n return [new BCurve(coords)];\n }\n\n // For non-linear curves, reduce to simple segments and scale each\n return reduce(curve).map(function (s) {\n if (curveIsLinear(s)) {\n return offset(s, t)[0];\n }\n return scaleCurve(s, t);\n });\n}\n\nexport function offset2(curve: BCurve, d: number): Point[]{\n const lut = curve.getLUTWithTVal(100);\n\n const res = lut.map((item)=>{\n const derivative = PointCal.unitVector(curve.derivative(item.tVal));\n const normal = {x: -derivative.y, y: derivative.x};\n const offsetPoint = {x: item.point.x + normal.x * d, y: item.point.y + normal.y * d};\n return offsetPoint;\n });\n\n return res;\n}\n\n// Helper function for line-line intersection (ported from bezier-js utils)\nfunction lli4(p1: Point, p2: Point, p3: Point, p4: Point): Point | false {\n const x1 = p1.x, y1 = p1.y,\n x2 = p2.x, y2 = p2.y,\n x3 = p3.x, y3 = p3.y,\n x4 = p4.x, y4 = p4.y;\n return lli8(x1, y1, x2, y2, x3, y3, x4, y4);\n}\n\nfunction lli8(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): Point | false {\n const nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n const ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n const d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (d == 0) {\n return false;\n }\n return { x: nx / d, y: ny / d };\n}\n\nfunction curveIsLinear(curve: BCurve): boolean{\n const order = curve.getControlPoints().length - 1;\n const points = curve.getControlPoints();\n const alignedPoints = alignPointsToLine(points, {p1: points[0], p2: points[order]});\n const baseLength = PointCal.distanceBetweenPoints(points[0], points[order]);\n\n // Sum of distances from the line (y coordinates in aligned space)\n const linear = alignedPoints.reduce((t, p) => t + Math.abs(p.y), 0) < baseLength / 50;\n\n return linear;\n}\n\n\nfunction scaleCurve(curve: BCurve, d: number | ((t: number) => number)): BCurve {\n const order = curve.getControlPoints().length - 1;\n let distanceFn: ((t: number) => number) | undefined = undefined;\n\n if (typeof d === \"function\") {\n distanceFn = d;\n }\n\n if (distanceFn && order === 2) {\n return scaleCurve(raiseCurveOrder(curve), distanceFn);\n }\n\n const points = curve.getControlPoints();\n\n // Check if curve is linear\n if (curveIsLinear(curve)) {\n return translate(\n curve,\n curve.normal(0).direction,\n distanceFn ? distanceFn(0) : d as number,\n distanceFn ? distanceFn(1) : d as number\n );\n }\n\n const r1 = distanceFn ? distanceFn(0) : d as number;\n const r2 = distanceFn ? distanceFn(1) : d as number;\n \n // Get offset points at endpoints to find the scaling origin\n const v = [offset(curve, 0, 10), offset(curve, 1, 10)];\n const np: Point[] = [];\n const o = lli4(v[0] as any, (v[0] as any).c, v[1] as any, (v[1] as any).c);\n\n if (!o) {\n // Fallback: use simple translation for problematic curves\n return translate(\n curve,\n curve.normal(0).direction,\n r1,\n r2\n );\n }\n\n // Move endpoint control points by distance along normal\n [0, 1].forEach(function (t) {\n const p = JSON.parse(JSON.stringify(points[t * order]));\n const vt = v[t] as any;\n p.x += (t ? r2 : r1) * vt.n.x;\n p.y += (t ? r2 : r1) * vt.n.y;\n np[t * order] = p;\n });\n\n if (!distanceFn) {\n // Move control points to lie on the intersection of the offset\n // derivative vector, and the origin-through-control vector\n [0, 1].forEach((t) => {\n if (order === 2 && !!t) return;\n const p = np[t * order];\n const derivativeAtT = curve.derivative(t);\n const p2 = { x: p.x + derivativeAtT.x, y: p.y + derivativeAtT.y };\n const intersection = lli4(p, p2, o, points[t + 1]);\n if (intersection) {\n np[t + 1] = intersection;\n } else {\n // Fallback: use original control point with simple offset\n const originalPoint = points[t + 1];\n const normal = curve.normal((t + 1) / order).direction;\n np[t + 1] = {\n x: originalPoint.x + (t ? r2 : r1) * normal.x,\n y: originalPoint.y + (t ? r2 : r1) * normal.y\n };\n }\n });\n return new BCurve(np);\n }\n\n // For function-based distances, move control points by distance\n // to ensure correct tangent at endpoints\n [0, 1].forEach(function (t) {\n if (order === 2 && !!t) return;\n const p = points[t + 1];\n const ov = {\n x: p.x - o.x,\n y: p.y - o.y,\n };\n let rc = distanceFn!((t + 1) / order);\n const m = Math.sqrt(ov.x * ov.x + ov.y * ov.y);\n ov.x /= m;\n ov.y /= m;\n np[t + 1] = {\n x: p.x + rc * ov.x,\n y: p.y + rc * ov.y,\n };\n });\n return new BCurve(np);\n}\n\nfunction alignPointsToLine(points: Point[], line: {p1: Point, p2: Point}) {\n const tx = line.p1.x,\n ty = line.p1.y,\n a = -Math.atan2(line.p2.y - ty, line.p2.x - tx),\n d = function (v: Point) {\n return {\n x: (v.x - tx) * Math.cos(a) - (v.y - ty) * Math.sin(a),\n y: (v.x - tx) * Math.sin(a) + (v.y - ty) * Math.cos(a),\n };\n };\n return points.map(d);\n};\n\nfunction map(v: number, ds: number, de: number, ts: number, te: number): number {\n const d1 = de - ds, // source range size\n d2 = te - ts, // target range size \n v2 = v - ds, // offset from source start\n r = v2 / d1; // ratio within source range\n return ts + d2 * r; // mapped value in target range\n}\n\nexport class TValOutofBoundError extends Error{\n constructor(message: string){\n super(message);\n }\n}\n\nexport type Point = {\n x: number;\n y: number;\n z?: number;\n}\n\nexport function AABBIntersects(AABB1: {min: Point, max: Point}, AABB2: {min: Point, max: Point}): boolean{\n if ((AABB1.min.x <= AABB2.max.x && AABB2.min.x <= AABB1.max.x) && (AABB1.min.y <= AABB2.max.y && AABB2.min.y <= AABB1.max.y)){\n return true;\n }\n return false;\n}\n\nexport function approximately (a: number, b: number, precision?: number) {\n const epsilon = 0.000001\n return Math.abs(a - b) <= (precision || epsilon);\n}\n\nexport function cuberoot2(v:number) {\n if(v<0) return -Math.pow(-v,1/3);\n return Math.pow(v,1/3);\n}\n\nexport function accept(t: number) {\n return 0 <= t && t <=1;\n}\n\nexport function getCubicRoots(pa: number, pb: number, pc: number, pd: number) {\n let a = (3*pa - 6*pb + 3*pc),\n b = (-3*pa + 3*pb),\n c = pa,\n d = (-pa + 3*pb - 3*pc + pd);\n\n // do a check to see whether we even need cubic solving:\n if (approximately(d,0)) {\n // this is not a cubic curve.\n if (approximately(a,0)) {\n // in fact, this is not a quadratic curve either.\n if (approximately(b,0)) {\n // in fact in fact, there are no solutions.\n return [];\n }\n // linear solution\n return [-c / b].filter(accept);\n }\n // quadratic solution\n let q = Math.sqrt(b*b - 4*a*c), a2 = 2*a;\n return [(q-b)/a2, (-b-q)/a2].filter(accept)\n }\n\n // at this point, we know we need a cubic solution.\n\n a /= d;\n b /= d;\n c /= d;\n\n let p = (3*b - a*a)/3,\n p3 = p/3,\n q = (2*a*a*a - 9*a*b + 27*c)/27,\n q2 = q/2,\n discriminant = q2*q2 + p3*p3*p3;\n\n // and some variables we're going to use later on:\n let u1, v1, root1, root2, root3;\n\n // three possible real roots:\n if (discriminant < 0) {\n let mp3 = -p/3,\n mp33 = mp3*mp3*mp3,\n r = Math.sqrt( mp33 ),\n t = -q / (2*r),\n cosphi = t<-1 ? -1 : t>1 ? 1 : t,\n phi = Math.acos(cosphi),\n crtr = cuberoot2(r),\n t1 = 2*crtr;\n root1 = t1 * Math.cos(phi/3) - a/3;\n root2 = t1 * Math.cos((phi+2*Math.PI)/3) - a/3;\n root3 = t1 * Math.cos((phi+4*Math.PI)/3) - a/3;\n return [root1, root2, root3].filter(accept);\n }\n\n // three real roots, but two of them are equal:\n if(discriminant === 0) {\n u1 = q2 < 0 ? cuberoot2(-q2) : -cuberoot2(q2);\n root1 = 2*u1 - a/3;\n root2 = -u1 - a/3;\n return [root1, root2].filter(accept);\n }\n\n // one real root, two complex roots\n var sd = Math.sqrt(discriminant);\n u1 = cuberoot2(sd - q2);\n v1 = cuberoot2(sd + q2);\n root1 = u1 - v1 - a/3;\n return [root1].filter(accept);\n}\n\nexport function getIntersectionsBetweenCurves(curve: BCurve, curve2: BCurve, deduplicationTolerance: number = 0.01): {selfT: number, otherT: number}[]{\n const threshold = 0.5;\n let pairs: {curve1: {curve: BCurve, startTVal: number, endTVal: number}, curve2: {curve: BCurve, startTVal: number, endTVal: number}}[] = [{curve1: {curve: curve, startTVal: 0, endTVal: 1}, curve2: {curve: curve2, startTVal: 0, endTVal: 1}}];\n const finalRes = [];\n while (pairs.length > 0){\n let curLength = pairs.length;\n for(let index = 0; index < curLength; index++){\n let pair = pairs.shift();\n if (pair == undefined){\n break;\n }\n let aabb1 = pair.curve1.curve.AABB;\n let aabb2 = pair.curve2.curve.AABB;\n let intersects = AABBIntersects(aabb1, aabb2);\n if(pair.curve1.curve.fullLength < threshold && pair.curve2.curve.fullLength < threshold){\n finalRes.push({intersection: pair.curve1.curve.get(0.5), tVal1: (pair.curve1.startTVal + pair.curve1.endTVal) * 0.5, tVal2: (pair.curve2.startTVal + pair.curve2.endTVal) * 0.5});\n continue;\n }\n if (intersects){\n let [subCurveControlPoints1, subCurveControlPoints2] = pair.curve1.curve.split(0.5);\n let [subCurveControlPoints3, subCurveControlPoints4] = pair.curve2.curve.split(0.5);\n pairs.push({\n curve1: {\n curve: new BCurve(subCurveControlPoints1), \n startTVal: pair.curve1.startTVal, \n endTVal: pair.curve1.startTVal + (pair.curve1.endTVal - pair.curve1.startTVal) * 0.5\n }, curve2: {\n curve: new BCurve(subCurveControlPoints3),\n startTVal: pair.curve2.startTVal,\n endTVal: pair.curve2.startTVal + (pair.curve2.endTVal - pair.curve2.startTVal) * 0.5\n }});\n\n pairs.push({\n curve1: {\n curve: new BCurve(subCurveControlPoints1), \n startTVal: pair.curve1.startTVal, \n endTVal: pair.curve1.startTVal + (pair.curve1.endTVal - pair.curve1.startTVal) * 0.5\n }, curve2: {\n curve: new BCurve(subCurveControlPoints4),\n startTVal: pair.curve2.startTVal + (pair.curve2.endTVal - pair.curve2.startTVal) * 0.5,\n endTVal: pair.curve2.endTVal\n }});\n\n pairs.push({\n curve1: {\n curve: new BCurve(subCurveControlPoints2), \n startTVal: pair.curve1.startTVal + (pair.curve1.endTVal - pair.curve1.startTVal) * 0.5 ,\n endTVal: pair.curve1.endTVal \n }, curve2: {\n curve: new BCurve(subCurveControlPoints3),\n startTVal: pair.curve2.startTVal,\n endTVal: pair.curve2.startTVal + (pair.curve2.endTVal - pair.curve2.startTVal) * 0.5\n }});\n\n pairs.push({\n curve1: {\n curve: new BCurve(subCurveControlPoints2), \n startTVal: pair.curve1.startTVal + (pair.curve1.endTVal - pair.curve1.startTVal) * 0.5 ,\n endTVal: pair.curve1.endTVal \n }, curve2: {\n curve: new BCurve(subCurveControlPoints4),\n startTVal: pair.curve2.startTVal + (pair.curve2.endTVal - pair.curve2.startTVal) * 0.5,\n endTVal: pair.curve2.endTVal\n }});\n }\n\n }\n }\n\n // Improved deduplication logic that handles close tvals on both curves\n const tVals: {selfT: number, otherT: number}[] = [];\n \n // Sort intersections by tVal1 for more predictable deduplication\n finalRes.sort((a, b) => a.tVal1 - b.tVal1);\n \n for (const intersection of finalRes) {\n let isDuplicate = false;\n \n // Check against all existing intersections\n for (const existing of tVals) {\n // Check if this intersection is close to an existing one on either curve\n const selfTClose = approximately(intersection.tVal1, existing.selfT, deduplicationTolerance);\n const otherTClose = approximately(intersection.tVal2, existing.otherT, deduplicationTolerance);\n \n // Consider it a duplicate if both t-values are close\n if (selfTClose && otherTClose) {\n isDuplicate = true;\n break;\n }\n \n // Also check for cases where intersections might be very close on the same curve\n // This handles cases where curves are nearly tangent or have very close intersections\n const selfTVeryClose = approximately(intersection.tVal1, existing.selfT, deduplicationTolerance * 10);\n const otherTVeryClose = approximately(intersection.tVal2, existing.otherT, deduplicationTolerance * 10);\n \n if (selfTVeryClose || otherTVeryClose) {\n // Additional check: if the intersection points are very close spatially\n const point1 = curve.get(intersection.tVal1);\n const point2 = curve2.get(intersection.tVal2);\n const existingPoint1 = curve.get(existing.selfT);\n const existingPoint2 = curve2.get(existing.otherT);\n \n const distance1 = PointCal.distanceBetweenPoints(point1, existingPoint1);\n const distance2 = PointCal.distanceBetweenPoints(point2, existingPoint2);\n \n // If both intersection points are spatially very close, consider it a duplicate\n if (distance1 < deduplicationTolerance * 100 && distance2 < deduplicationTolerance * 100) {\n isDuplicate = true;\n break;\n }\n }\n }\n \n if (!isDuplicate) {\n tVals.push({selfT: intersection.tVal1, otherT: intersection.tVal2});\n }\n }\n \n return tVals;\n}\n\nexport function solveCubic(a: number, b: number, c: number, d: number) {\n if (Math.abs(a) < 1e-8) { // Quadratic case, ax^2+bx+c=0\n a = b; b = c; c = d;\n if (Math.abs(a) < 1e-8) { // Linear case, ax+b=0\n a = b; b = c;\n if (Math.abs(a) < 1e-8) // Degenerate case\n return [];\n return [-b/a];\n }\n\n let D = b*b - 4*a*c;\n if (Math.abs(D) < 1e-8)\n return [-b/(2*a)];\n else if (D > 0)\n return [(-b+Math.sqrt(D))/(2*a), (-b-Math.sqrt(D))/(2*a)];\n return [];\n }\n\n // Convert to depressed cubic t^3+pt+q = 0 (subst x = t - b/3a)\n let p = (3*a*c - b*b)/(3*a*a);\n let q = (2*b*b*b - 9*a*b*c + 27*a*a*d)/(27*a*a*a);\n let roots: number[];\n\n if (Math.abs(p) < 1e-8) { // p = 0 -> t^3 = -q -> t = -q^1/3\n roots = [cuberoot(-q)];\n } else if (Math.abs(q) < 1e-8) { // q = 0 -> t^3 + pt = 0 -> t(t^2+p)=0\n roots = [0].concat(p < 0 ? [Math.sqrt(-p), -Math.sqrt(-p)] : []);\n } else {\n let D = q*q/4 + p*p*p/27;\n if (Math.abs(D) < 1e-8) { // D = 0 -> two roots\n roots = [-1.5*q/p, 3*q/p];\n } else if (D > 0) { // Only one real root and two complex roots\n let u = cuberoot(-q/2 - Math.sqrt(D));\n let v = cuberoot(-q/2 + Math.sqrt(D));\n //console.log(\"Complext Root 1 real:\", -(u+v)/2.0 - a / 3.0, \"imaginary:\", Math.sqrt(3) / 2.0 * (v - u));\n //console.log(\"Complext Root 2 real:\", -(u+v)/2.0 - a / 3.0, \"imaginary:\",-1 * Math.sqrt(3) / 2.0 * (v - u));\n\n roots = [u - p/(3*u)];\n } else { // D < 0, three roots, but needs to use complex numbers/trigonometric solution\n let u = 2*Math.sqrt(-p/3);\n let t = Math.acos(3*q/p/u)/3; // D < 0 implies p < 0 and acos argument in [-1..1]\n let k = 2*Math.PI/3;\n roots = [u*Math.cos(t), u*Math.cos(t-k), u*Math.cos(t-2*k)];\n }\n }\n\n // Convert back from depressed cubic\n for (let i = 0; i < roots.length; i++)\n roots[i] -= b/(3*a);\n\n return roots;\n}\n\nexport function cuberoot(x: number) {\n var y = Math.pow(Math.abs(x), 1/3);\n return x < 0 ? -y : y;\n}\n\nexport function computeWithControlPoints(tVal: number, controlPoints: Point[]): Point{\n let points = [...controlPoints];\n while (points.length > 1) {\n let lowerLevelPoints = points.slice(1);\n for(let index = 0; index < lowerLevelPoints.length; index++){\n lowerLevelPoints[index] = PointCal.addVector(PointCal.multiplyVectorByScalar(points[index], (1 - tVal)), PointCal.multiplyVectorByScalar(points[index + 1], tVal));\n }\n points = lowerLevelPoints;\n }\n return points[0];\n}\n\nfunction curveIsSimple(curve: BCurve): boolean {\n if (curve.getControlPoints().length === 4) {\n const points = curve.getControlPoints();\n const p0ToP3Vector = PointCal.subVector(points[3], points[0]);\n const p0ToP1Vector = PointCal.subVector(points[1], points[0]);\n const p0ToP2Vector = PointCal.subVector(points[2], points[0]);\n \n const a1 = PointCal.angleFromA2B(p0ToP3Vector, p0ToP1Vector);\n const a2 = PointCal.angleFromA2B(p0ToP3Vector, p0ToP2Vector);\n if ((a1 > 0 && a2 < 0) || (a1 < 0 && a2 > 0)) return false;\n }\n const n1 = curve.normal(0).direction;\n const n2 = curve.normal(1).direction;\n let s = n1.x * n2.x + n1.y * n2.y;\n // if (this._3d) {\n // s += n1.z * n2.z;\n // }\n return Math.abs(Math.acos(s)) < Math.PI / 3;\n }\n\n\n\nfunction translate(curve: BCurve, vector: Point, d1: number, d2: number){\n const order = curve.getControlPoints().length - 1;\n const points = curve.getControlPoints();\n const d = points.map((_, i: number) => (1 - i / order) * d1 + (i / order) * d2);\n return new BCurve(points.map((p, i) => ({x: p.x + d[i] * vector.x, y: p.y + d[i] * vector.y})));\n}\n",
|
|
6
|
+
"import { PointCal, Point } from \"@ue-too/math\";\n\nexport class Line {\n private startPoint: Point;\n private endPoint: Point;\n\n constructor(startPoint: Point, endPoint: Point){\n this.startPoint = startPoint;\n this.endPoint = endPoint;\n }\n\n getStartPoint(): Point{\n return this.startPoint;\n }\n\n getEndPoint(): Point{\n return this.endPoint;\n }\n\n intersectionWithAnotherLine(lineToIntersect: Line){\n return getLineIntersection(this.startPoint, this.endPoint, lineToIntersect.getStartPoint(), lineToIntersect.getEndPoint());\n }\n\n projectPoint(point: Point){\n return projectPointOntoLine(point, this.getStartPoint(), this.getEndPoint());\n }\n\n length(): number{\n return PointCal.distanceBetweenPoints(this.startPoint, this.endPoint);\n }\n \n getTranslationRotationToAlginXAxis(){\n const translation = PointCal.subVector({x: 0, y: 0}, this.startPoint);\n const rotationAngle = PointCal.angleFromA2B(PointCal.subVector(this.endPoint, this.startPoint), {x: 1, y: 0});\n\n return {translation, rotationAngle};\n }\n\n pointInLine(point: Point): boolean{\n const baseVector = PointCal.unitVectorFromA2B(this.startPoint, this.endPoint);\n const start2PointVector = PointCal.subVector(point, this.startPoint);\n const length = PointCal.dotProduct(start2PointVector, baseVector);\n const start2PointUnitVector = PointCal.unitVector(start2PointVector);\n const errorThreshold = PointCal.distanceBetweenPoints(this.startPoint, this.endPoint) * 0.0001;\n return length <= PointCal.distanceBetweenPoints(this.startPoint, this.endPoint) && length >= 0 && Math.abs(start2PointUnitVector.x - baseVector.x) < 0.0001 && Math.abs(start2PointUnitVector.y - baseVector.y) < 0.0001;\n }\n\n lerp(ratio: number): Point {\n return PointCal.linearInterpolation(this.startPoint, this.endPoint, ratio);\n }\n}\n\nexport function getLineIntersection(startPoint: Point, endPoint: Point, startPoint2: Point, endPoint2: Point):{\n intersects: boolean,\n intersection?: Point,\n offset?: number\n}{\n const numerator = (endPoint2.x - startPoint2.x) * (startPoint.y - startPoint2.y) - (endPoint2.y - startPoint2.y) * (startPoint.x - startPoint2.x);\n const denominator = (endPoint2.y - startPoint2.y) * (endPoint.x - startPoint.x) - (endPoint2.x - startPoint2.x) * (endPoint.y - startPoint.y);\n \n if (denominator === 0){\n return {intersects: false};\n }\n const t = numerator / denominator;\n if (t >= 0 && t <= 1){\n return {\n intersects: true, \n intersection: PointCal.linearInterpolation(startPoint, endPoint, t),\n offset: t\n }\n } else {\n return {\n intersects: false,\n }\n }\n\n}\n\nexport function projectPointOntoLine(point: Point, lineStartPoint: Point, lineEndPoint: Point): {\n within: boolean,\n projectionPoint?: Point,\n offset?: number\n}{\n const baseVector = PointCal.unitVector(PointCal.subVector(lineEndPoint, lineStartPoint));\n const vectorToPoint = PointCal.subVector(point, lineStartPoint);\n const res = PointCal.dotProduct(vectorToPoint, baseVector);\n if (res < 0 || res > PointCal.magnitude(PointCal.subVector(lineEndPoint, lineStartPoint))){\n return {\n within: false,\n };\n }\n return {\n within: true,\n projectionPoint: PointCal.addVector(lineStartPoint, PointCal.multiplyVectorByScalar(baseVector, res)),\n offset: res / PointCal.magnitude(PointCal.subVector(lineEndPoint, lineStartPoint))\n };\n\n}\n",
|
|
7
|
+
"import { Point, PointCal } from \"@ue-too/math\";\n\nexport type HandleType = \"ALIGNED\" | \"VECTOR\" | \"FREE\";\n\nexport type HandlePoint = {\n position: Point;\n type: HandleType;\n}\n\nexport class ControlPoint {\n\n private position: Point;\n private leftHandle: HandlePoint;\n private rightHandle: HandlePoint;\n\n constructor(position: Point, leftHandle: HandlePoint, rightHandle: HandlePoint){\n this.position = position;\n this.leftHandle = leftHandle;\n this.rightHandle = rightHandle;\n }\n\n setPosition(destinationPosition: Point, prevControlPoint: ControlPoint | undefined, nextControlPoint: ControlPoint | undefined){\n let diff = PointCal.subVector(destinationPosition, this.position);\n this.position = destinationPosition;\n this.leftHandle.position = PointCal.addVector(this.leftHandle.position, diff);\n this.rightHandle.position = PointCal.addVector(this.rightHandle.position, diff);\n if(this.leftHandle.type == \"VECTOR\" && prevControlPoint){\n let relativeVector = PointCal.subVector(prevControlPoint.getPosition(), this.position);\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n this.leftHandle.position = PointCal.addVector(this.position, relativeVector);\n if(this.rightHandle.type == \"ALIGNED\"){\n let relativeVector = PointCal.subVector(this.rightHandle.position, this.position);\n let mag = PointCal.magnitude(relativeVector);\n let direction = PointCal.unitVectorFromA2B(this.leftHandle.position, this.position);\n this.rightHandle.position = PointCal.addVector(this.position, PointCal.multiplyVectorByScalar(direction, mag));\n }\n }\n if(this.rightHandle.type == \"VECTOR\" && nextControlPoint){\n let relativeVector = PointCal.subVector(nextControlPoint.getPosition(), this.position);\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n this.rightHandle.position = PointCal.addVector(this.position, relativeVector);\n if(this.leftHandle.type == \"ALIGNED\"){\n let mag = PointCal.distanceBetweenPoints(this.leftHandle.position, this.position);\n let direction = PointCal.subVector(this.position, this.rightHandle.position);\n this.leftHandle.position = PointCal.addVector(this.position, PointCal.multiplyVectorByScalar(direction, mag));\n }\n }\n if(prevControlPoint !== undefined && prevControlPoint.getRightHandle().type == \"VECTOR\"){\n let relativeVector = PointCal.subVector(this.position, prevControlPoint.getPosition());\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n prevControlPoint.setRightHandlePosition(PointCal.addVector(prevControlPoint.getPosition(), relativeVector));\n }\n if(nextControlPoint !== undefined && nextControlPoint.getLeftHandle().type == \"VECTOR\"){\n let relativeVector = PointCal.subVector(this.position, nextControlPoint.getPosition());\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n nextControlPoint.setLeftHandlePosition(PointCal.addVector(nextControlPoint.getPosition(), relativeVector));\n }\n }\n\n getPosition(): Point{\n return this.position;\n }\n\n setLeftHandleTypeVector(prevControlPoint: ControlPoint | undefined){\n if(this.rightHandle.type != \"VECTOR\"){\n this.rightHandle.type = \"FREE\";\n }\n let relativeVector: Point;\n if(prevControlPoint == undefined){\n relativeVector = PointCal.subVector(this.leftHandle.position, this.position);\n } else {\n relativeVector = PointCal.subVector(prevControlPoint.getPosition(), this.position);\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n }\n this.leftHandle.position = PointCal.addVector(this.position, relativeVector);\n }\n\n setLeftHandleTypeAligned(){\n this.leftHandle.type = \"ALIGNED\";\n if(this.rightHandle.type == \"VECTOR\"){\n let direction = PointCal.unitVectorFromA2B(this.rightHandle.position, this.position);\n let mag = PointCal.distanceBetweenPoints(this.position, this.leftHandle.position);\n this.leftHandle.position = PointCal.addVector(this.position, PointCal.multiplyVectorByScalar(direction, mag));\n }\n }\n\n setLeftHandleTypeFree(){\n this.leftHandle.type = \"FREE\";\n }\n\n setRightHandleTypeVector(nextControlPoint: ControlPoint | undefined) {\n if(this.leftHandle.type != \"VECTOR\"){\n this.leftHandle.type = \"FREE\";\n }\n let relativeVector: Point;\n if(nextControlPoint == undefined){\n relativeVector = PointCal.subVector(this.rightHandle.position, this.position);\n } else {\n relativeVector = PointCal.subVector(nextControlPoint.getPosition(), this.position);\n relativeVector = PointCal.multiplyVectorByScalar(relativeVector, 1 / 3);\n }\n this.rightHandle.position = PointCal.addVector(this.position, relativeVector);\n }\n\n setRightHandleTypeAligned(){\n this.rightHandle.type = \"ALIGNED\";\n if(this.leftHandle.type == \"VECTOR\") {\n let direciton = PointCal.unitVectorFromA2B(this.leftHandle.position, this.position);\n let mag = PointCal.distanceBetweenPoints(this.position, this.rightHandle.position);\n this.rightHandle.position = PointCal.addVector(this.position, PointCal.multiplyVectorByScalar(direciton, mag));\n } \n }\n\n setRightHandleTypeFree(){\n this.rightHandle.type = \"FREE\";\n }\n\n setLeftHandlePosition(destPos: Point){\n let leftHandleType = this.leftHandle.type;\n switch(leftHandleType){\n case \"ALIGNED\":\n if(this.rightHandle.type == \"VECTOR\"){\n let diff = PointCal.subVector(destPos, this.position);\n let rightHandleDiff = PointCal.unitVectorFromA2B(this.rightHandle.position, this.position);\n let resMag = PointCal.dotProduct(diff, rightHandleDiff);\n let res = PointCal.multiplyVectorByScalar(rightHandleDiff, resMag);\n this.leftHandle.position = PointCal.addVector(this.position, res);\n } else if (this.rightHandle.type == \"ALIGNED\"){\n this.leftHandle.position = destPos;\n let mag = PointCal.distanceBetweenPoints(this.rightHandle.position, this.position);\n let direction = PointCal.unitVectorFromA2B(this.leftHandle.position, this.position);\n let res = PointCal.multiplyVectorByScalar(direction, mag);\n this.rightHandle.position = PointCal.addVector(res, this.position);\n } else {\n this.leftHandle.position = destPos;\n }\n break;\n case \"FREE\":\n this.leftHandle.position = destPos;\n break;\n case \"VECTOR\":\n break;\n default:\n throw new Error(`Unknown left handle type for control point`);\n }\n }\n\n setRightHandlePosition(destPos: Point){\n let rightHandleType = this.rightHandle.type;\n switch(rightHandleType){\n case \"ALIGNED\":\n if(this.leftHandle.type == \"VECTOR\"){\n let diff = PointCal.subVector(destPos, this.position);\n let leftHandleDiff = PointCal.unitVectorFromA2B(this.leftHandle.position, this.position);\n let resMag = PointCal.dotProduct(diff, leftHandleDiff);\n let res = PointCal.multiplyVectorByScalar(leftHandleDiff, resMag);\n this.rightHandle.position = PointCal.addVector(this.position, res);\n } else if (this.rightHandle.type == \"ALIGNED\"){\n this.rightHandle.position = destPos;\n let mag = PointCal.distanceBetweenPoints(this.leftHandle.position, this.position);\n let direction = PointCal.unitVectorFromA2B(this.rightHandle.position, this.position);\n let res = PointCal.multiplyVectorByScalar(direction, mag);\n this.leftHandle.position = PointCal.addVector(res, this.position);\n } else {\n this.rightHandle.position = destPos;\n }\n break;\n case \"FREE\":\n this.rightHandle.position = destPos;\n break;\n case \"VECTOR\":\n break;\n default:\n throw new Error(`Unknown left handle type for control point`);\n }\n }\n\n getLeftHandle(): HandlePoint{\n return this.leftHandle;\n }\n\n getRightHandle(): HandlePoint{\n return this.rightHandle;\n }\n}\n\nexport class CompositeBCurve{\n\n private controlPoints: ControlPoint[];\n\n constructor(controlPoints: ControlPoint[] = []){\n this.controlPoints = controlPoints;\n }\n\n getControlPoints(): ControlPoint[]{\n return this.controlPoints;\n }\n\n appendControlPoint(position: Point){\n let leftHandlePosition = PointCal.addVector(position, {x: -100, y: 0});\n let rightHandlePosition = PointCal.addVector(position, {x: 100, y: 0});\n let leftHandlePoint: HandlePoint = {\n position: leftHandlePosition,\n type: \"FREE\"\n }\n let rightHandlePoint: HandlePoint = {\n position: rightHandlePosition,\n type: \"FREE\"\n }\n\n let newControlPoint = new ControlPoint(position, leftHandlePoint, rightHandlePoint);\n this.controlPoints.push(newControlPoint);\n }\n\n setLeftHandlePositionOfControlPoint(controlPointIndex: number, destPos: Point){\n if(controlPointIndex >= this.controlPoints.length || controlPointIndex < 0){\n return;\n }\n this.controlPoints[controlPointIndex].setLeftHandlePosition(destPos);\n }\n\n setRightHandlePositionOfControlPoint(controlPointIndex: number, destPos: Point){\n if(controlPointIndex >= this.controlPoints.length || controlPointIndex < 0){\n return;\n }\n this.controlPoints[controlPointIndex].setRightHandlePosition(destPos);\n }\n \n setPositionOfControlPoint(controlPointIndex: number, destPos: Point){\n if(controlPointIndex >= this.controlPoints.length || controlPointIndex < 0){\n return;\n }\n let prevControlPoint = undefined;\n let nextControlPoint = undefined;\n if(controlPointIndex + 1 < this.controlPoints.length){\n nextControlPoint = this.controlPoints[controlPointIndex + 1];\n }\n if(controlPointIndex - 1 >= 0){\n prevControlPoint = this.controlPoints[controlPointIndex - 1];\n }\n this.controlPoints[controlPointIndex].setPosition(destPos, prevControlPoint, nextControlPoint);\n }\n}\n",
|
|
8
|
+
"import { Line } from \"./line\";\nimport { Point } from \"@ue-too/math\";\n\ntype AdvanceAtTWithLengthWithinCurveRes = {\n type: \"withinCurve\";\n tVal: number;\n point: Point;\n}\n\ntype AdvanceAtWithLengthBeforeCurveRes = {\n type: \"beforeCurve\";\n remainLength: number;\n}\n\ntype AdvanceAtWithLengthAfterCurveRes = {\n type: \"afterCurve\";\n remainLength: number;\n}\n\ntype AdvanceAtTWithLengthOutofCurveRes = AdvanceAtWithLengthBeforeCurveRes | AdvanceAtWithLengthAfterCurveRes;\n\ntype AdvanceAtTWithLengthRes = AdvanceAtTWithLengthWithinCurveRes | AdvanceAtTWithLengthOutofCurveRes;\nexport class Path {\n\n private lines: Line[];\n\n constructor(lines: Line[]){\n this.lines = lines;\n }\n\n append(line: Line): void{\n this.lines.push(line);\n }\n\n clear(): void{\n this.lines = [];\n }\n\n prepend(line: Line): void{\n this.lines.unshift(line);\n }\n\n getLines(): Line[]{\n return this.lines;\n }\n\n getLength(): number{\n let res = 0;\n this.lines.forEach((line)=>{\n res += line.length();\n });\n return res;\n }\n\n // advanceByDistancAtPercentage(percentage: number, distance: number): {destination: Point}\n\n getPercentages(): {start: number, end: number}[]{\n const length = this.getLength();\n let currentCurvePercentage = 0;\n const res: {start: number, end: number}[] = [];\n this.lines.forEach((line)=>{\n const lineLength = line.length();\n const linePercentage = lineLength / length;\n let start = currentCurvePercentage;\n currentCurvePercentage += linePercentage;\n let end = currentCurvePercentage;\n res.push({start, end});\n });\n res[res.length - 1].end = 1;\n return res;\n }\n\n getPointByPercentage(percentage: number): Point | never{\n if (percentage < 0 || percentage > 1){\n throw new Error(\"Percentage must be between 0 and 1\");\n }\n const percentages = this.getPercentages();\n let left = 0;\n let right = percentages.length - 1;\n while (left <= right){\n const mid = Math.floor((left + right) / 2);\n if (percentage < percentages[mid].end){\n right = mid - 1;\n } else if (percentage > percentages[mid].end){\n left = mid + 1;\n } else {\n left = mid;\n break;\n }\n }\n const line = this.lines[left];\n const linePercentage = percentages[left];\n const ratio = (percentage - linePercentage.start) / (linePercentage.end - linePercentage.start);\n return line.lerp(ratio);\n }\n}\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "EABF32F5EF0F7EC864756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ue-too/curve",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/ue-too/ue-too.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/ue-too/ue-too",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
13
|
+
},
|
|
5
14
|
"exports": {
|
|
6
15
|
".": {
|
|
7
16
|
"types": "./index.d.ts",
|
|
@@ -16,12 +25,9 @@
|
|
|
16
25
|
"ts-node": "^10.9.2"
|
|
17
26
|
},
|
|
18
27
|
"dependencies": {
|
|
19
|
-
"@ue-too/math": "^0.
|
|
28
|
+
"@ue-too/math": "^0.8.0"
|
|
20
29
|
},
|
|
21
30
|
"main": "./index.js",
|
|
22
31
|
"types": "./index.d.ts",
|
|
23
|
-
"module": "./index.js"
|
|
24
|
-
|
|
25
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
32
|
+
"module": "./index.js"
|
|
33
|
+
}
|
package/LICENSE.txt
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2023 niuee
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
-
of this software and associated documentation files (the “Software”), to deal
|
|
5
|
-
in the Software without restriction, including without limitation the rights
|
|
6
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
-
furnished to do so, subject to the following conditions:
|
|
9
|
-
|
|
10
|
-
The above copyright notice and this permission notice shall be included in
|
|
11
|
-
all copies or substantial portions of the Software.
|
|
12
|
-
|
|
13
|
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
16
|
-
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
THE SOFTWARE.
|