求出三次贝塞尔曲线上给定点的系数/函数
find coefficient/function for given points on cubic bezier curve
我在这个信息图的基础上创建了一个简单的d3图:http://bit.ly/1o4iGfK
我现在想复制的是每个"节点"之间的三次贝塞尔线
多亏了这个网站,我画了一条曲线。所以我知道每四个点的x和y坐标:
(x0,y0(=(32,45(
(x1,y1(=(32150(
(x2,y2(=(190150(
(x3,y3(=(190260(
但我真的不知道如何使用常见的算法,并将其转换为javascript函数,这样我就只能编写已知的(x0,y0(和(x3,y3(坐标,以及pouf!得到一条漂亮的线
主要是因为我不太擅长代数。对不起
我找到了此线程:此处
这似乎是答案的一部分,但我并不完全理解代码和解释
现在我已经使用了这个功能:
function linkArc(d) {
var dx = d.source.x - d.target.x,
dy = d.source.y - d.target.y,
dr = Math.sqrt(dx * dx + dy * dy);
return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
}
这是一个简单的弧线,不是我真正想要的
(d.source.x,d.target.y(:第一个点的坐标(x0,y0(
(d.target.x,d.target.y(:终点的坐标(x3,y3(
谢谢
您想要的是端点处的垂直坡度。由于内部控制点决定坡度,因此必须将它们直接设置在控制点的上方和下方。有两个自由度的多少上面和下面。例如,将它们放在高度差的三分之一处
x1 = x0; y1 = (2*y0+y3)/3;
x2 = x3; y2 = (2*y3+y0)/3;
一般方案为
y1 = (a*y0+b*y3)/(a+b);
y2 = (a*y3+b*y0)/(a+b);
其中
y1-y0 = b/(a+b)*(y3-y0)
使得b/(a+b(是第一控制点在第零端点之上的高度分数。
所以要得到2/3的分数,而不是上面的1/3,使用a=1和b=2得到
y1=(y0+2*y3)/3;
y2=(y3+2*y0)/3;
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- jquery点击函数select&取消选择
- 如何制作一个函数,使用node.js计算图形曲线下的面积
- 如何在函数曲线 HTML 画布下查找区域
- 用构造函数重写贝塞尔曲线
- Famo.us -记录'曲线'函数
- 求出三次贝塞尔曲线上给定点的系数/函数