使用bezier.js检测贝塞尔曲线与直线交点无结果的问题
贝塞尔曲线与直线交点检测无结果的问题修复
问题根源:创建
Bezier实例时传入了未定义的变量x1,x2,c1,c2,y1,y2,导致贝塞尔曲线实例初始化错误,无法正确执行交点检测逻辑。你的controlPoints数组已经给出了二次贝塞尔曲线的三个点(起点、控制点、终点),但没有正确传递给构造函数。修正后的代码:
const controlPoints = [450,50,300,183,150,150]; const line = { p1: {x: 400, y: 0}, p2: {x: 400, y: 100} } const intersectionPoints = []; // 正确传递贝塞尔曲线的控制点参数 const bezierCurve = new Bezier(...controlPoints); console.log(bezierCurve); // 可打印实例确认初始化是否正确 const intersections = bezierCurve.lineIntersects(line); if (intersections.length > 0) { for (let e = 0; e < intersections.length; e++) { let n = intersections[e], t = bezierCurve.get(n); intersectionPoints.push(t); } } console.log("Intersection Points:", intersectionPoints); return intersectionPoints;
- 说明:
二次贝塞尔曲线的Bezier构造函数需要传入6个参数,对应起点x, 起点y, 控制点x, 控制点y, 终点x, 终点y,你的controlPoints数组正好符合这个格式,用扩展运算符...直接传入即可。修正后,代码会正确计算出曲线与直线x=400的交点(约{x:400, y:93}左右)。
内容的提问来源于stack exchange,提问作者Malik
相关产品推荐
相关产品推荐

