对canvas arc()中counterclockwise参数的一些误解

一直没有很细心地去研究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)

顺时针(false)

时间: 2024-10-11 23:15:47

对canvas arc()中counterclockwise参数的一些误解的相关文章

HTML5 Canvas arc()函数//////////////////////(转)

HTML5 Canvas arc()函数 实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(100,75,50,0,2*Math.PI); ctx.stroke(); 浏览器支持 Internet Explorer 9.Firefox.Opera.Chrome 以及 Safari 支持 arc() 方法.

HTML5 Canvas arc()函数

实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(100,75,50,0,2*Math.PI); ctx.stroke(); 浏览器支持 Internet Explorer 9.Firefox.Opera.Chrome 以及 Safari 支持 arc() 方法. 注释:Internet Explorer

block使用小结、在arc中使用block、如何防止循环引用

引言 使用block已经有一段时间了,感觉自己了解的还行,但是几天前看到CocoaChina上一个关于block的小测试主题 : [小测试]你真的知道blocks在Objective-C中是怎么工作的吗?,发现竟然做错了几道, 才知道自己想当然的理解是错误的,所以抽时间学习了下,并且通过一些测试代码进行测试,产生这篇博客. Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支

RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?

<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getContext("2d"); for(var i=0;i<12;i++){ for(var j=0;j<24;j++){ cxt.fillStyle="rgb(240,"+Math.floor(255-11.5*i)+","+Math.flo

ARC中__bridge, __bridge__transfer, __bridge_retained 关系

现在已经凌晨了,但是我却没发觉困. 琢磨了好久的东西,终于顿悟. 这篇是其中的一个点,记录下来,以备后续查阅! 说到__bridge,就不得不说Objective-C和Core Foundation对象之间的关系. 当你在 Objective-C 和 Core Foundation 对象之间进行转换时,就需要使用 Bridge cast. 今天的多数应用很少需要使用 Core Foundation,大多数工作都可以直接使 用 Objective-C 类来完成.但是某些底层 API,如 Core

javascript获取当前url中的参数

javascript获取当前页面url中的参数可以使用location的search方法,获取到的是url中?后面的部分,例如http:localhost:8080/Manager/index.jsp?id=1 使用location的search方法可以获取到字符串?id=1;想要获取?后面的键值对可以使用substring方法对其进行截取,截取后获得id=1;需要获得id的值,可以使用split()方法对其进行拆分,拆分表达式为"=".下面看具体例子: window.onload =

ORA-01084: OCI 调用中的参数无效

执行一个Insert语句,系统抛出来的异常是:ORA-01084:OCI调用中的参数无效. 请注意检查Insert字段中是否有clob字段并传入了这样的""空字符串,如果是的话就是问题所在了. 解决方案: 用DbNull代替""赋值. 代码参照: parameters[0].Value = SqlNull(model.ZB_GUID);  public object SqlNull(object obj)        {            if (obj ==

如何获取url中的参数并传递给iframe中的报表

在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数呢?以下用报表软件FineReport简单介绍一些. 具体实现过程 将报表生成页面时,给网页添加onload事件,首先获取url中的参数,然后嫁接到iframe的src上,或者通过获得的参数拼接处完整的报表url赋给iframe的src. <html> <head> <title

js获取url链接中的参数

js获取url链接中的参数:url传递参数这是常识,这里就不多介绍了,既然传递参数就要获取参数的值,下面就介绍一下如何实现此功能.代码如下: function request(paras){ var url="softwhy.com?a=1&b=2"; var paraString=url.substring(url.indexOf("?")+1,url.length).split("&"); var paraObj={} for