如何在HTML画布上绘制具有可变厚度的贝塞尔曲线
How to draw a bezier curve with variable thickness on an HTML canvas?
我想用贝塞尔曲线连接框进行可视化。更重要的边缘应该更粗。每个盒子有一个输出,但有很多输入。因此,我想保持输入边的厚度不变(为了节省空间),只改变输出边的厚度(每个盒子只有一个)。
这就是为什么我想在两端绘制不同厚度的bezier曲线。它们应该呈现在HTML画布元素上。我知道context.bezierCurveTo()
,但它只允许曲线的一种厚度。
假设你正在画一条曲线,它的粗为2乘以r
(x1,y1)控制点1在x方向上,那么你可以这样做:
canvas.fillStyle = "red";
canvas.beginPath();
canvas.moveTo(x1, y1-r);
canvas.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);
canvas.bezierCurveTo(cpx2, cpy2, cpx1, cpy1, x1, y1+r);
canvas.lineTo(x1, y1+r);
canvas.fill();
如果有人想做类似的事情,下面是我的代码:
function plotFlow(context, centerLeft, centerRight, thicknessLeft, thicknessRight) {
var leftUpper = {x: centerLeft.x, y: centerLeft.y - thicknessLeft / 2};
var leftLower = {x: centerLeft.x, y: leftUpper.y + thicknessLeft};
var rightUpper = {x: centerRight.x, y: centerRight.y - thicknessRight / 2};
var rightLower = {x: centerRight.x, y: rightUpper.y + thicknessRight};
var center = (centerRight.x + centerLeft.x) / 2;
var cp1Upper = {x: center, y: leftUpper.y};
var cp2Upper = {x: center, y: rightUpper.y};
var cp1Lower = {x: center, y: rightLower.y};
var cp2Lower = {x: center, y: leftLower.y};
context.beginPath();
context.moveTo(leftUpper.x, leftUpper.y);
context.bezierCurveTo(cp1Upper.x,cp1Upper.y, cp2Upper.x,cp2Upper.y, rightUpper.x,rightUpper.y);
context.lineTo(rightLower.x, rightLower.y);
context.bezierCurveTo(cp1Lower.x,cp1Lower.y, cp2Lower.x,cp2Lower.y, leftLower.x,leftLower.y);
context.lineTo(leftUpper.x, leftUpper.y);
context.fill();
if (typeof context.endPath == 'function') {
context.endPath();
}
}
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何设置html元素填充的动画
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何编写HTML输入的JS内联
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量
- 如何使Javascript动态html表及其上的事件
- 在chrome.tabs.onCreated之后加载HTML页面
- 如何在vs2002中调试html页面
- 如何使用javascript或html下载PDF格式的填写表单
- 视频HTML没有'无法在Internet Explorer 11上工作
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 使用angular重定向到html页面
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 如何在函数曲线 HTML 画布下查找区域
- 如何在HTML画布上绘制具有可变厚度的贝塞尔曲线
- 在html画布上绘制贝塞尔曲线