Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 画布:消除小圆弧之间的间隙_Javascript_Math_Canvas - Fatal编程技术网

Javascript 画布:消除小圆弧之间的间隙

Javascript 画布:消除小圆弧之间的间隙,javascript,math,canvas,Javascript,Math,Canvas,下面是一个例子: 我只是学习,所以我肯定错过了什么或做错了什么 看到圆弧之间的间隙了吗?我正在用小圆弧构建一个完整的圆。我知道如何修复它,但我想最好避免在每一步上重新绘制全弧,否则我错了 我找到了另一个解决方案,带有偏移量。设置偏移移动器AD+0.009 ctx.arc(x(),y(),radius,-moveFromRad,-moveToRad-0.009,antiClockwise); 将一个圆弧部分重叠在另一个圆弧部分上,但如果使用rgba alpha到0.5,则该部分将可见 除了在每

下面是一个例子:

我只是学习,所以我肯定错过了什么或做错了什么

看到圆弧之间的间隙了吗?我正在用小圆弧构建一个完整的圆。我知道如何修复它,但我想最好避免在每一步上重新绘制全弧,否则我错了

我找到了另一个解决方案,带有偏移量。设置偏移移动器AD+0.009

ctx.arc(x(),y(),radius,-moveFromRad,-moveToRad-0.009,antiClockwise);
将一个圆弧部分重叠在另一个圆弧部分上,但如果使用rgba alpha到0.5,则该部分将可见

除了在每个步骤上重新绘制完整的圆圈外,是否还有其他修复方法

除了在每个步骤上重新绘制完整的圆圈外,是否还有其他修复方法

简言之,不,如果你想让它在跨浏览器中工作,并且用半透明的颜色看起来很漂亮,就不需要了

这意味着,修改代码以在每次绘制时清除,并消除开始角度步长:

看看这两个-备注:

var interval=setInterval(function(){
    if(stop) {
        return;
    }
    // Log current state
    log.prepend('<tr><td>We are at PIradians '+moveToRad/Math.PI+'</td><td>, radians '+moveToRad+'</td><td>, degrees '+Math.round(moveToRad*180/Math.PI)+'</td></tr>');

    // console.log('We are at PIradians',moveToRad/Math.PI,', radians',moveToRad,', degrees',Math.round(moveToRad*180/Math.PI));

    // Clear after full cycle
    if(moveToRad>=fullCycle){
        cycle();
    }
    clear(); // !!! gotta clear!

    // Create arc
    // 0.01 fix offset, to remove that gap between arc parts
    ctx.arc(x(),y(),radius,-moveFromRad,-moveToRad,antiClockwise);

    // Draw arc line
    ctx.stroke();

    // Recalculate text width
    txtsizes=ctx.measureText(cycles);
    // Text width/2 and font-size / 3 to ~center the text in circle
    ctx.fillText(cycles, x(-txtsizes.width/2), y(font_height/3));

    // Don't redraw full arc from the start, draw from the last point
    //moveFromRad+=step; // !!! no more me!
    // Increment radian for the next step
    moveToRad+=step;

    ctx.beginPath();                
},period);  
var interval=setInterval(函数(){
如果(停止){
返回;
}
//记录当前状态
log.prepend('我们在PIradians'+moveToRad/Math.PI+',弧度'+moveToRad+',度'+Math.round(moveToRad*180/Math.PI)+'');
//log('我们在PIradians',moveToRad/Math.PI',radians',moveToRad',degrees',Math.round(moveToRad*180/Math.PI));
//全周期后清除
如果(移动负载>=全周期){
循环();
}
清除();/!!!必须清除!
//创建弧
//0.01“固定偏移”,以消除圆弧零件之间的间隙
弧(x(),y(),半径,-moveFromRad,-moveToRad,逆时针);
//画弧线
ctx.stroke();
//重新计算文本宽度
txtsizes=ctx.measureText(周期);
//文本宽度/2和字体大小/3,使文本在圆圈中居中
ctx.fillText(循环,x(-txtsizes.width/2),y(font\u height/3));
//不要从起点重新绘制全弧,从最后一点开始绘制
//moveFromRad+=步骤;/!!!不再是我!
//为下一步增加弧度
moveToRad+=步进;
ctx.beginPath();
},期间);

我建议您在每一步都重新绘制它。。。可能会更快,而且代码也很少;)是的,我想这是唯一的解决办法。我试着把步幅降低到0.3度,但速度太慢了D