一直没有很细心地去研究CanvasRenderingContext2D对象的arc方法,对它的认识比较模糊,导致犯了一些错误,特发此文,以纠正之前的错误理解。

arc()方法定义如下:

arc() 方法使用一个中心点和半径,为一个画布的当前子路径添加一条弧。

语法:

arc(x, y, radius, startAngle, endAngle, counterclockwise)
参数 描述
x, y 描述弧的圆形的圆心的坐标。
radius 描述弧的圆形的半径。
startAngle, endAngle

沿着圆指定弧的开始点和结束点的一个角度。这个角度用弧度来衡量。

沿着 X 轴正半轴的三点钟方向的角度为 0。

counterclockwise 可选。规定应该逆时针还是顺时针绘图。false = 顺时针,true = 逆时针。

首先要明确startAngle这个参数,规范定义的是 “沿着 X 轴正半轴的三点钟方向的角度为 0”,如下图:

这个方法的头 5 个参数指定了圆周的一个起始点和结束点。调用这个方法会在当前点和当前子路径的起始点之间添加一条直线。接下来,它沿着圆周,在子路径的起始点和结束点之间添加弧(方向从起点开始,向终点画弧)。

最后一个 counterclockwise 参数指定了圆应该沿着哪个方向遍历来连接起始点和结束点。这个方法将当前位置设置为弧的终点。

首先来看顺时针的情况:

ctx.beginPath();
ctx.arc(100,75,50,0,Math.PI / 2,false);
ctx.stroke();

逆时针:

ctx.beginPath();
ctx.arc(100,75,50,0,Math.PI / 2,true);
ctx.stroke();

两种情况都是由起点朝终点画弧线,但以顺时针和逆时针区分,于是就有了两种不同的图形。

最后以实例来说明这一过程:

逆时针(true)

 

// 360) {
i = 0;
ctx.clearRect(0,0,c.width,c.height);
}
ctx.clearRect(0,0,c.width,c.height);

var angle = startAngle + i * arc;
ctx.lineWidth = 10;
ctx.strokeStyle = 'red';
ctx.beginPath();
ctx.arc(centerX, centerY, outsideRadius, 0, -angle - arc, true);
//ctx.closePath();
ctx.stroke();
i++;

requestAnimationFrame(draw,c);
})();
})();
// ]]>

顺时针(false)

 

// 360) {
j = 0;
ctx1.clearRect(0,0,c1.width,c1.height);
}
ctx1.clearRect(0,0,c1.width,c1.height);

var angle = startAngle + j * arc;
ctx1.lineWidth = 10;
ctx1.strokeStyle = 'red';
ctx1.beginPath();
ctx1.arc(centerX, centerY, outsideRadius, 0, angle + arc, false);
//ctx.closePath();
ctx1.stroke();
j++;

requestAnimationFrame(draw,c1);
})();
})();
// ]]>

最新文章

  1. iOS6_自动约束 Constraints
  2. NetBIOS与Winsock编程接口
  3. 用PHP访问数据库
  4. AC日记——无线网络发射器选址 洛谷 P2038
  5. Android-Universal-Image-Loader开源项目的简要说明及使用实例
  6. AIX 第7章 指令记录
  7. JS的第一节课
  8. Tips: compilation and creating new projects on Android 4.0
  9. jQuery 滚动动画简单版
  10. javascript学习代码
  11. CSS的一些思考(一)
  12. 【RabbitMQ系列】队列、绑定、交换器
  13. MongoDB 关系
  14. Spring Aop源码分析
  15. promise的理解
  16. spring事务解析
  17. 洛谷 p1123 取数游戏【dfs】
  18. linux下文件内容查找 转
  19. 模拟赛 sutoringu
  20. BZOJ 3172 [Tjoi2013]单词 AC自己主动机(fail树)

热门文章

  1. Excel VBA基础教程
  2. 阿里面试题:说说HashMap的扩容过程?
  3. 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作(转)
  4. APUE 学习笔记(二) 文件I/O
  5. mongodb window安装学习
  6. UVA - 10615 Rooks
  7. java正则表达式的知识
  8. Oracle SOA Suite OverView
  9. poj-3744-Scout YYF I-矩阵乘法
  10. C - The C Answer (2nd Edition) - Exercise 1-16