在画布上绘制多边形时的间隙

Gap when drawing polygon on canvas

本文关键字:间隙 多边形 绘制      更新时间:2023-09-26

我使用以下内容在html画布上绘制多边形:

var canvas = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");
var numberOfSides = 6,
    size = 20,
    Xcenter = 25,
    Ycenter = 25;
ctx.beginPath();
ctx.moveTo (Xcenter +  size * Math.cos(0), Ycenter +  size *  Math.sin(0));          
for (var i = 1; i <= numberOfSides;i += 1) {
    ctx.lineTo (Xcenter + size * Math.cos(i * 2 * Math.PI / numberOfSides), Ycenter + size * Math.sin(i * 2 * Math.PI / numberOfSides));
}
ctx.strokeStyle = "#000000";
ctx.lineWidth = 10;
ctx.stroke();

不幸的是,它在多边形的末端留下了一个间隙。知道怎么解决这个问题吗?

Jsfidle here

不要画到所有6点,只画到前5点,然后调用ctx.closePath();

http://jsfiddle.net/757mavjb/2/

var canvas = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");
var numberOfSides = 6,
    size = 20,
    Xcenter = 25,
    Ycenter = 25;
ctx.beginPath();
ctx.moveTo (Xcenter +  size * Math.cos(0), Ycenter +  size *  Math.sin(0));          
for (var i = 1; i < numberOfSides;i += 1) {
    ctx.lineTo (Xcenter + size * Math.cos(i * 2 * Math.PI / numberOfSides), Ycenter + size * Math.sin(i * 2 * Math.PI / numberOfSides));
}
ctx.closePath();
ctx.strokeStyle = "#000000";
ctx.lineWidth = 10;
ctx.stroke();

(注意从i <= numberOfSidesi < numberOfSides的变化)

尝试再画一面来填补空白:

for (var i = 1; i <= numberOfSides+1;i += 1) {
    ctx.lineTo (Xcenter + size * Math.cos(i * 2 * Math.PI / numberOfSides), Ycenter + size * Math.sin(i * 2 * Math.PI / numberOfSides));
}