【问题标题】:Drawing Arc 3 mouse points in JavaScript Canvas [closed]在 JavaScript Canvas 中绘制 Arc 3 鼠标点 [关闭]
【发布时间】:2014-09-25 01:39:33
【问题描述】:

我需要绘制一条包含初始点、中间点和最终点的弧。

我在 JavaScript 中使用 HTML5 画布圆弧函数(x、y、半径、startAngle、endAngle、逆时针)

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes#Arcs

我有:

var initial = { x: 20, y: 40 };
var median = { x: 40, y: 33 };
var final = { x: 180, y: 40 };

【问题讨论】:

  • 出了什么问题?我们可以看看一些代码吗?
  • 澄清一下,您想要一条从initial 开始经过median 并以final 结束的二次曲线吗?不幸的是,这个请求有无数的解决方案。但是,请查看此 SO 答案,该答案选择“平衡”传入和传出 median 的曲线的解决方案之一:stackoverflow.com/questions/6711707/…

标签: javascript html html5-canvas


【解决方案1】:

arc 命令不会通过 3 个点绘制您想要的曲线。

相反,使用context.quadraticCurveTo 绘制通过 3 个点的二次曲线

曲线通过你的 3 个点有无数种解决方案。

以下是使用该方程的一种解决方案,该方程使用曲线的中值张力 (t=0.50):

var initial = { x: 20, y: 40 };
var median = { x: 40, y: 33 };
var final = { x: 180, y: 40 };

var controlX=2*median.x-initial.x/2-final.x/2;
var controlY=2*median.y-initial.y/2-final.y/2;

这是示例代码和演示:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");

var PI2=Math.PI*2;

var initial = { x: 20, y: 40 };
var median = { x: 40, y: 33 };
var final = { x: 180, y: 40 };

var controlX=2*median.x-initial.x/2-final.x/2;
var controlY=2*median.y-initial.y/2-final.y/2;


ctx.beginPath();
ctx.arc(initial.x,initial.y,4,0,PI2);
ctx.closePath();
ctx.moveTo(median.x,median.y);
ctx.arc(median.x,median.y,4,0,PI2);
ctx.closePath();
ctx.moveTo(final.x,final.y);
ctx.arc(final.x,final.y,4,0,PI2);
ctx.closePath();
ctx.fill();

ctx.strokeStyle='red';
ctx.beginPath();
ctx.moveTo(initial.x,initial.y);
ctx.quadraticCurveTo(controlX,controlY,final.x,final.y);
ctx.stroke();
body{ background-color: ivory; }
canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>

【讨论】:

  • context.arc 对你不起作用。它总是会创建一个部分圆,它很少会通过您指定的 3 个点。
  • 我不明白你最后的评论:-/
猜你喜欢
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多