javascript - 如何连接多条贝塞尔曲线?

标签 javascript jquery html canvas bezier

我想使用 bezierCurveTo() 绘制图表。据我所知,只能用1个bezierCurveTo()设置3个 anchor 。如果我使用多个,我会得到一条不平滑的线。我该如何解决这个问题?

<canvas id="myCanvas" width="600" height="150" style="border:1px solid #d3d3d3;"></canvas>

<script>
  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');

  context.beginPath();
  context.moveTo(0, 150);
  context.bezierCurveTo(100, 0, 200, 100, 300, 20);
  context.bezierCurveTo(400, 0, 500, 100, 600, 20);
  
  context.strokeStyle = 'blue';
  context.stroke();
</script> 

最佳答案

这是一个不平凡的问题。这取决于您想要实现的平滑程度(只需连接切线,或使连接点的曲线半径相同)。最简单的方法如图所示([A3-X]/[X-B2] = [A3-A4]/[B1-B2];从 A4 开始 [A3-X] 向量,从 B1 开始 [X-B2] 到获取 A3x 和 B2x anchor )。 enter image description here

但是您也可以看看 D3 Shape module (例如 Catmul Rom 曲线),它将从它应该经过的点生成贝塞尔样条线。或者看看某处的算法。

关于javascript - 如何连接多条贝塞尔曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60632202/

相关文章:

javascript - jQuery 正则表达式检查用户输入的数字

javascript - 将按钮添加到移动/拖动的背景 HTML/CSS/JS

html - 在整个网站上保持不变的标题

html - 放大时保持导航栏的结构

javascript - 无法让简单的 jquery ajax 调用工作

javascript - 如何使用 python 删除 &lt;script&gt; 和 &lt;/script&gt; 之间的文本?

javascript - 如何在asp中获取表行的n个数字输入类型的值?

javascript - 使用 javascript 或 jq 设置标签数据属性的样式

javascript - 动态填充用户

javascript - 将处理程序附加到 DocumentSelectionChanged 事件会禁用 Office for Mac 上的撤消堆栈