html5 Canvas画图教程(5)—canvas里画曲线之arc方法

Fortunate帅帅

Fortunate帅帅

2016-02-19 11:17

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐html5 Canvas画图教程(5)—canvas里画曲线之arc方法,赶紧看过来吧!
在canvas画线条这篇文章中,我讲了画直线的方法,按理这篇画曲线的文章早该发了,但由于canvas画曲线比较特殊,我还没摸透,所以要一步步尝试。
canvas里画曲线的难点之一,就在于他连曲线的函数就有4个!分别是arc,arcTo,quadraticCurveTo,bezierCurveTo.我从最简单的arc方法讲起吧。
arc的作用是画一个正规的圆弧,可以是一个完整的圆,也可以是一个圆的某一段弧线。

arc的语法如下

代码如下:

context.arc(x, y, radius, startAngle, endAngle, anticlockwise)

他的参数我解释一下,即
arc(圆心x,圆心y,半径,开始的角度,结束的角度,是否逆时针)
如果我们用arc画一个完整的圆,该怎么搞?大家注意到参数中有个开始角度与结束角度,如果我们开始角度是0,结束角度是360,不就是个正圆了?
正解!但要注意的是,这里的角度是用弧度来表示的(Flash也是如此),一个完整的圆即360度,就是2PI弧度。

所以我们这么写

代码如下:

ctx.arc(400,400,20,0,Math.PI*2);
ctx.fill();
ctx.stroke();

和lineTo一样,arc也是画的路径,所以我们要在他后面调用填充或描边的方法才能显出图形(图中采用了红色的strokeStyle与半透明红色的fillStyle)。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
现在我们来画一个1/4圆,角度嘛,就是90度。前面说了,360度角即2PI弧度,那么一度角就是2PI/360=PI/180弧度,那么90度就是2PI/360*90=PI/2弧度(其他的角度请自行计算)。

代码如下:

ctx.arc(400,400,20,0,Math.PI*2/4);


 
由图我们可以确定arc的0度就是数学上常用的0度,但是角度默认是顺时针张开的,与数学模型相反(跟坐标有关,因为canvas坐标也与数学坐标相反)。
不过前面不是有个参数是确定是否逆时针吗?我们把他设为true如何?

代码如下:

ctx.arc(400,400,20,0,Math.PI*2/4,true);


 
你会看到,角度变成了逆时针展开,导致弧线变成了360-90=270度。
但是!大家要注意一点,就是起点与终点的计算方式,始终是以0度为起点,并顺时针延伸的,不存在顺反的说法。顺反时针只是弧线的绘制方向。
这样不仅仅可以防止顺来逆去的容易混淆,而且更方便计算。
不过,灵活的使用逆时针,有时候很有用。
上面的例子,我们的起点角度都是0,现在我们试试其他的起点角度吧,比如90度。

代码如下:

ctx.arc(400,400,20,Math.PI*2/4,Math.PI*2+Math.PI);

如果我们起点是90度而终点也是90度,那结果就是什么都不得画,所以我把终点角度改成了180度,最后得到下图的图形。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)问题:如果我们从非0度起点来画一个完整的圆,行不行?当然也可以,只要你把弧线的终点设置为360度+起点角度,如:

代码如下:

ctx.arc(400,400,20,Math.PI*2/4,Math.PI*2+Math.PI*2/4); //起点90度,终点360+90度

不过这种做法纯属没事找事,正常人是不会用的。
总结:Canvas的arc方法是画正圆弧线的办法,也只能画正弧线,没法画其他奇怪的弧线,比如S形虽然我最喜欢S形了。
展开更多 50%)
分享

猜你喜欢

html5 Canvas画图教程(5)—canvas里画曲线之arc方法

Web开发
html5 Canvas画图教程(5)—canvas里画曲线之arc方法

html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法

Web开发
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

Web开发
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法

Web开发
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

html5 canvas 画图教程案例分析

Web开发
html5 canvas 画图教程案例分析

html5 Canvas画图教程(9)—canvas中画出矩形和圆形

Web开发
html5 Canvas画图教程(9)—canvas中画出矩形和圆形

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

android 电话状态监听(来电和去电)实现代码

android 电话状态监听(来电和去电)实现代码

HTML5之SVG 2D入门4—笔画与填充

HTML5之SVG 2D入门4—笔画与填充
下拉加载更多内容 ↓