zoukankan      html  css  js  c++  java
  • canvas详解---绘制弧线

    Draw an arc

    context.arc(centerx,centery,radius,startingAngle,endingAngle,anticlockwise=false);

    参数一是圆心的x坐标值,参数二是圆心y轴坐标值,参数三是半径,参数四是起始弧度,参数五十终止弧度,最后一个参数表示的绘制方向,默认的是false表示的是顺时针的方向。如果是true表示的是逆时针方向。

    注意了弧度制都是固定好了。如上图所示

    请看下面的一段程序

    <!DOCTYPE html>
    <html>
    <head>
    <title>canvas详解</title>
    </head>
    <body>
    <canvas id="canvas" width="1024" height="768" style="border:1px solid #aaa;display:block;margin:50 auto;"></canvas>
    <script>
    var canvas=document.getElementById("canvas");
    var context=canvas.getContext("2d");
    context.lineWidth=5;
    context.strokeStyle="red";
    context.arc(100,100,50,0,1.5*Math.PI);
    context.stroke();

    </script>
    </body>
    </html>

    结果显示:

    如果在context.arc(100,100,50,0,1.5*Math.PI,true);表示的是逆时针从0度到1.5PI处,结果如下图

    所以从上面的例子可以看出,弧度值是固定的,不是说顺时针画时就以顺时针的方向来看,逆时针画时就以逆时针的方向来看。这一点千万要注意。

    再来看一个程序

    var canvas=document.getElementById("canvas");
    var context=canvas.getContext("2d");
    context.lineWidth=5;
    context.strokeStyle="red";
    for(var i=0;i<10;i++)
    {
    context.beginPath();
    context.arc(50+i*100,60,40,0,2*Math.PI*(i+1)/10);
    context.closePath();
    context.stroke();
    }

    结果显示如下:

    这时候大家会感到奇怪了,为什么画出来的是一个封闭的图形呢?

    其实这是closePath另外一个作用了,当前我们绘制的路径不是封闭的路径时,closePath()会将自动路径封闭。

    如果这样的话

    for(var i=0;i<10;i++)
    {
    context.beginPath();
    context.arc(50+i*100,60,40,0,2*Math.PI*(i+1)/10);
    context.stroke();
    }

    生成的就是一段段的弧,不会是封闭的了。

    而且我们使用了beginPath(),canvas会知道我们是重新画一条,如果给这几条设置不同的属性也是可以的。

    接下来在看一个问题

    var canvas=document.getElementById("canvas");
    var context=canvas.getContext("2d");
    context.lineWidth=5;
    context.fillStyle="red";
    for(var i=0;i<10;i++)
    {
    context.beginPath();
    context.arc(50+i*100,60,40,0,2*Math.PI*(i+1)/10);
    context.closePath();
    context.fill();
    }

    如果是这样的话,结果会是填充的几个弧形

    ,如果我们去掉了closePath(),结果也会是一样的。

    为什么呢?

    因为如果调用了fill()的话,canvas会自动的找寻首尾然后将其连接起来,然后在填充。

    canvas还有很对绘制接口,我将在下一张具体讲解canvas的其他知识。

  • 相关阅读:
    杭电2060WA
    杭电2060
    UVa10082 没有通过
    百度笔试题目02
    百度笔试题目01
    Q1002 四则运算
    百度笔试题目
    约瑟夫环 详细的分析
    算法导论03
    汉诺塔01
  • 原文地址:https://www.cnblogs.com/yuaima/p/5045702.html
Copyright © 2011-2022 走看看