gpt4 book ai didi

javascript - Canvas 上的彩色弧线

转载 作者:行者123 更新时间:2023-11-30 10:06:09 25 4
gpt4 key购买 nike

我想绘制不同颜色和半径的扇区。所以我使用 canvas.arc 和填充方法编写了一些代码

// constants & vars
var data=[0.2, 0.5, .5, 1.0, 0.8, .9, .7, .8];
var colors=["red", "blue", "green", "gray", "orange",
"rgb(255,165,0)", "rgb(100,100,100)", "black"];
var WIDTH = 200;
var HEIGHT = 200;
var centralPoint = {x:WIDTH/2, y:HEIGHT/2};
var radius=HEIGHT/2;
var sectorsCount = data.length;
var epsilon=0.0001;
var myCanvas = document.getElementById("graphic"),
ctx = myCanvas.getContext('2d');
myCanvas.height=HEIGHT;
myCanvas.width=WIDTH;

//drawing
for (var i=0; i<sectorsCount-1;i++) {
ctx.moveTo(centralPoint.x, centralPoint.y);
ctx.fillStyle=colors[i];
ctx.arc(centralPoint.x,centralPoint.y,
radius*data[i],
i*2*Math.PI/sectorsCount+epsilon ,
(i+1)*2*Math.PI/sectorsCount-epsilon,
false);
ctx.closePath();
ctx.fill();
ctx.stroke();
}
ctx.fillStyle="black";
ctx.arc(centralPoint.x,centralPoint.y, 10, 0, Math.PI*2, true);
ctx.fill();

问题是当下一个扇区正在绘制时,前一个扇区也会改变颜色。所以最后我有不同半径但具有相同(最后)颜色的扇区。

可能有更简单的方法来做同样的事情?

最佳答案

路径绘制命令以 context.beginPath 开始,并在下一个 context.beginPath 之前一直有效。因此,如果没有新的 beginPath,您之前的所有楔形都将使用最后一个楔形重新绘制。

所以简单的解决方法是确保每个楔形以 beginPath 开头:

var data=[0.2, 0.5, .5, 1.0, 0.8, .9, .7, .8];
var colors=["red", "blue", "green", "gray", "orange", "rgb(255,165,0)", "rgb(100,100,100)", "black"];
var WIDTH = 200;
var HEIGHT = 200;
var centralPoint = {x:WIDTH/2, y:HEIGHT/2};
var radius=HEIGHT/2;
var sectorsCount = data.length;
var epsilon=0.0001;
var myCanvas = document.getElementById("graphic"),
ctx = myCanvas.getContext('2d');
myCanvas.height=HEIGHT;
myCanvas.width=WIDTH;

//drawing
for (var i=0; i<sectorsCount-1;i++) {
ctx.beginPath();
ctx.moveTo(centralPoint.x, centralPoint.y);
ctx.fillStyle=colors[i];
ctx.arc(centralPoint.x,centralPoint.y,
radius*data[i],
i*2*Math.PI/sectorsCount+epsilon ,
(i+1)*2*Math.PI/sectorsCount-epsilon,
false);
ctx.closePath();
ctx.fill();
ctx.stroke();
}
ctx.fillStyle="black";
ctx.beginPath();
ctx.arc(centralPoint.x,centralPoint.y, 10, 0, Math.PI*2, true);
ctx.fill();
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="graphic" width=300 height=300></canvas>

关于javascript - Canvas 上的彩色弧线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com