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

最新文章

  1. 【krpano】加密XML手动解密分析
  2. Python日志logging
  3. 为什么Smalltalk不流行
  4. NOIp DP 1003 爆零记
  5. java作业——整数相加
  6. Samza的ApplicationMaster
  7. Android之Http网络编程(三)
  8. 盘点 PHP 和 ASP.NET 的10大对比!
  9. FpSpread添加标注
  10. android入门——BroadCast(1)
  11. nginx区分手机与电脑浏览器并进入相应站点
  12. loadrunner:参数类型及其取值机制
  13. ubuntu下进入root错误解决方法
  14. Redis 基础(一)
  15. Foxmail中配置O365邮箱和Hotmail邮箱
  16. Java知多少(31)static关键字以及Java静态变量和静态方法
  17. laravel文件上传报错 stream_socket_sendto():
  18. 【repost】对JAVASCRIPT匿名函数的理解(透彻版)
  19. 大数据时代,银行BI应用的方案探讨
  20. javascript实现的拖拽回放

热门文章

  1. pv删除不掉
  2. Kubernetes集群之清除集群
  3. ASP.NET Core使用Docker-Compose实现多容器应用部署
  4. 【视频开发】【计算机视觉】相机标定(Camera calibration)原理、步骤
  5. Keras 中的 verbose 参数
  6. laravel如何引用外部文件
  7. Topshelf 搭建 Windows 服务
  8. 全国自考C++程序设计
  9. pytest_全局变量的使用
  10. Oracel 数据库表操作