Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用canvas元素绘制圆环路径_Javascript_Html_Canvas_Html5 Canvas - Fatal编程技术网

Javascript 使用canvas元素绘制圆环路径

Javascript 使用canvas元素绘制圆环路径,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,我想用画布画一条双螺母路径。它包括与直线相连的内拱和外拱。但我得到了错误的画布图像。请看下图 期望值: 这是我的密码 this.ctx.beginPath(); this.ctx.moveTo(options.x, options.y); this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, false); this.ctx.lineTo(options.x, options.y)

我想用画布画一条双螺母路径。它包括与直线相连的内拱和外拱。但我得到了错误的画布图像。请看下图

期望值:

这是我的密码

 this.ctx.beginPath();
 this.ctx.moveTo(options.x, options.y);
 this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, false);
 this.ctx.lineTo(options.x, options.y);
 this.ctx.arc(options.x, options.y, options.innerR, options.start, options.end, false);
 this.ctx.closePath();
请任何人帮我解决这个问题

谢谢, Bharathi.

将“笔”移动到(options.x,options.y)并围绕该点绘制一个圆时,您的“笔”必须首先到达圆弧的起始位置。这里画了一条你不想在画布上画的线

要解决此问题,必须计算外圆的起始位置(取决于起始角度)。你应该尝试用sin或cos来计算你的“新”x和y

然后看起来就像

var newX = options.x + options.radius * cos(options.start);
var newY = options.y + options.radius * sin(options.start);
然后移到这个位置

this.ctx.moveTo(newX, newY);
然后围绕旧的x和y画一个圆圈

this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, false);

对于内圈和端点位置,您可以类似于此进行计算。

我已经使用css进行了计算

        var gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
        gradient.addColorStop(0, "#008B8B");
        gradient.addColorStop(0.75, "#F5DEB3");
        ctx.fillStyle = gradient;
        ctx.fillRect(0, 0, canvas.width, canvas.height);
只需删除上面代码中的最后两行,您就会看到内圈再次出现


如果您有任何问题。你也可以随便问