javascript - 在 Raphael 中绘制一半的贝塞尔路径

标签 javascript jquery svg raphael bezier

假设我有一个如下所示的三次贝塞尔曲线路径(格式化为与 Raphael 路径函数一起使用):

M55 246S55 247 55 248

只是一个例子。这是从我的绘图应用程序中获取的,当用户按住鼠标按钮时,我使用光标绘制一条线,有点像铅笔或记号笔。每次用户移动鼠标时,我都使用 jquery 的 mousemove 事件在两点之间画线。在画线之前还有一个(引用点),这样就可以创建贝塞尔曲线。

这是我的问题:是否可以让拉斐尔只画给定路径的一半?我知道 getSubpath() 函数,但如果我对贝塞尔曲线的理解是正确的,那么计算第二个参数将相当困难。 animate 函数的问题是它创建了双线(也就是说,它创建了我想要的曲线,以及它周围不应显示的四四方方的线,可能是因为鼠标移动速度快于动画可以处理的速度).

当然,如果我的方法本身在某些方面存在缺陷(或者我对可能的解决方案的理解),我愿意听听。任何帮助将不胜感激。

最佳答案

有点乱,但也许这会回答它:

line[line.length] = paper.path(drawPath); //drawPath being the fill line length 

//get a subpath, being half the length of your bezier curve
subPath = line[line.length - 1].getSubpath(0, line[line.length - 1].getTotalLength()/2);

//remove the full-length bezier curve
line[line.length - 1].remove();

//Draw your new line
line[line.length - 1] = paper.path(subpath);

老实说,这是非常低效的。但是,我想不出更好的方法来解决它。您不能只捕获切线并除以一半,因为贝塞尔曲线会比切线的长度更长(如乌鸦飞翔)。这意味着您必须通过 rapheal 处理该行,然后获得一半长度的 subPath。

关于javascript - 在 Raphael 中绘制一半的贝塞尔路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665390/

相关文章:

javascript - 如何强制 div 在浏览器调整大小时重绘?

相当于 vbscript Now 和 Time() 的 Javascript

jQuery 同步动画?

javascript - 如何在重定向到 jquery 之前预加载(缓存)外部页面?

jQuery:不同 parent 之间的事件委托(delegate)

javascript - 我可以使用 JavaScript SVG 库将 SVG 图像显示为 div 背景吗?

javascript - 为什么这个正则表达式/DOM字符实体测试器返回 `undefined`?

javascript - 图像结果未显示在页面上

javascript - 触发补间动画以单独悬停在 SVG 六边形上

javascript - 克隆输入字段数组的唯一 ID 值