javascript - 在 JavaScript Canvas 中绘制 Arc 3 鼠标点

标签 javascript html html5-canvas

我需要绘制一条具有初始点、中点和终点的圆弧。

我在 JavaScript 中使用 HTML5 Canvas 圆弧函数(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 };

最佳答案

圆弧命令不会通过这 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;

enter image description here

这里是示例代码和演示:

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>

关于javascript - 在 JavaScript Canvas 中绘制 Arc 3 鼠标点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029143/

相关文章:

html - 在一行中显示两个单选按钮

javascript - 最大化 HTML5 <canvas> 上粒子渲染的速度

javascript - 表单验证自动滚动修改javascript

javascript - 向具有多个属性的对象添加元素

Java、HTML 和 Android 应用程序使用相同的 ServerSocket 服务器

php - 如何使用 PHP 选择存储在数据库中的数据

javascript - 如何将范围/输入 slider 附加到 Canvas 动画上?

javascript - 如何在同一个 html 页面上显示两个 p5js 草图?

javascript - 如何通过滚动复制缩小效果

javascript - 我可以避免在 Leaflet 中高缩放级别时出现扭曲的圆圈吗?