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的其他知识。

  • 相关阅读:
    HDU2647(拓扑排序+反向建图)
    Android Activity之间通信
    Swift 编程语言学习0.1——Swift简单介绍
    HDU 5012 Dice (BFS)
    当向后台插入或读取JSON数据遇见回车时
    Android CTS測试Fail项改动总结(四)
    【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
    android蓝牙4.0(BLE)开发之ibeacon初步
    Error opening zip file or JAR manifest missing : D:play-1.2.5/framework/play-1.2.5.jar
    Codeforces Round #256 (Div. 2)——Multiplication Table
  • 原文地址:https://www.cnblogs.com/yuaima/p/5045702.html
Copyright © 2011-2022 走看看