【发布时间】:2025-12-27 15:10:07
【问题描述】:
我确实有一条贝塞尔曲线,并且在某个点上,我想要第二条贝塞尔曲线以平滑的方式“分支”第一条曲线。除了计算交点(按照贝塞尔曲线的百分比),我还需要控制点(切线和权重)。 交点是用下面这段 javascript 计算的:
getBezier = function getBez(percent,p1,cp1,cp2,p2) {
function b1(t) { return t*t*t }
function b2(t) { return 3*t*t*(1-t) }
function b3(t) { return 3*t*(1-t)*(1-t) }
function b4(t) { return (1-t)*(1-t)*(1-t) }
var pos = {x:0,y:0};
pos.x = p1.x*b1(percent) + cp1.x*b2(percent) + cp2.x*b3(percent) + p2.x*b4(percent);
pos.y = p1.y*b1(percent) + cp1.y*b2(percent) + cp2.y*b3(percent) + p2.y*b4(percent);
return pos;
}
(非 IE 浏览器可以在 http://www.iscriptdesign.com -> Tutorial -> Groups & Paths 看到它的实际效果)。 我现在需要的是分支点的控制点或(切线和权重)(我不知道从哪里开始,我希望有人可以指出一些代码或数学方程,如果可能的话,作为来自相同参数的函数如上面的 getBezier 函数)。
【问题讨论】:
-
是否有特定原因需要使用单独的曲线,而不是另一个三次或二次线段?这很重要,因为 SVG 规范支持自动选择下一段的第一个控制点,这样曲线就会变得平滑。在此处查看 S/s 和 T/t:w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands
-
我正在尝试设计一个托盘架。支架和托盘是两条不同的曲线,支架将托盘支撑到曲线的某一点,但在某一点我希望支架和托盘之间有一个孔。在另一点,支架和托盘曲线将再次连接以完成孔,并为托盘制作稳定的对称支架。支架需要 2 个凸块来防止托盘沿其长度轴移动我尝试编译一个小示例:www.iscriptdesign.com -> 教程 -> 托盘支架。
-
红线是托盘支架的上侧,黑线是托盘的下侧。关键是我希望黑线在边缘之前跟随红线中的“沟渠”而不是分支。
标签: javascript svg bezier curve-fitting