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


Posted in HTML / CSS onJanuary 09, 2013

继续讲canvas中画曲线的方法,今天讲quadraticCurveTo。
说实话这个方法有点吓人,单从函数名称上都可以初体验。话说,我觉得有必要把这个函数名缩短。
quadratic的意思是二次,即数学中二次元方程那个二次。而ctx.quadraticCurveTo的参数如下:

复制代码
代码如下:

ctx.quadraticCurveTo(x1,y1,x,y);

其中x,y是终点的坐标,而x1,y1是曲线控制点的坐标?什么?你问我起点在哪里?起点在此之前用moveTo确定。
我之所以把控制点的坐标带上序号1,是因为后面讲的某个画曲线的函数有两个控制点,也就有x2,y2了,所以这里先打个预防针。
我们由moveTo确定的起点和quadraticCurveTo自身确定的终点,可以连接成一条直线,由于quadraticCurveTo只有一个控制点,这个控制点不是在直线左边,就是在直线右边,所以,quadraticCurveTo永远只能画弧线,还是画不出S形。

为了便于理解,我还是沿用上一篇文章的画辅助线的方法。初步代码如下:

复制代码
代码如下:

var x1=350,
y1 = 250,
x = 400,
y = 500;
ctx.beginPath();
ctx.strokeStyle="#000";
ctx.moveTo(300,300); //起点
ctx.quadraticCurveTo(x1,y1,x,y); //正牌曲线
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = "rgba(255,0,0,0.5)";
ctx.moveTo(300,300);
ctx.lineTo(x1,y1);//本行与下一行是画控制点的线
ctx.lineTo(x,y);
ctx.moveTo(300,300);//开始连接曲线的起点和终点
ctx.lineTo(x,y);
ctx.stroke();

这里我画了两条辅助线,一条是起点与终点的连接线,一条是起点到控制点再到终点的辅助线(其实是两条),这两条线的交汇点就是quadraticCurveTo的控制点坐标。

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


quadraticCurveTo也只能画弧形的曲线,不过这个弧形可以很不规则,相比arc和arcTo,也算是一个进步了。
另外,quadraticCurveTo也不会像arcTo一样,出现反转的情况。
当然,如果你把控制点拉得非常远,可能图形也会变得让你不认识。我们来试一下:
“y1 = 950;
”我只是把y1改大了一些,然后曲线就超出canvas的范围了。

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


不过,quadraticCurveTo画出的曲线的范围,永远无法达到或超过控制点的坐标,我们只有把控制点“控制”好,就不用担心了。
我写了一个简单的可以动的示例页,展示了quadraticCurveTo画曲线的过程,希望能帮你加深理解: 

提示:您可以先修改部分代码再运行

代码写的丑请多包涵。
HTML / CSS 相关文章推荐
CSS3教程(1):什么是CSS3
Apr 02 HTML / CSS
在HTML5中如何使用CSS建立不可选的文字
Oct 17 HTML / CSS
使用CSS3和Checkbox实现JQuery的一些效果
Aug 03 HTML / CSS
详解CSS3中@media的实际使用
Aug 04 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
Jan 15 HTML / CSS
css3中less实现文字长阴影(long shadow)
Apr 24 HTML / CSS
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
Apr 10 HTML / CSS
HTML5 embed 标签使用方法介绍
Aug 13 HTML / CSS
html5的websockets全双工通信详解学习示例
Feb 26 HTML / CSS
带你认识HTML5中的WebSocket
May 22 HTML / CSS
关于html字符串正则判断和匹配的具体使用
Dec 12 HTML / CSS
HTML5播放实现rtmp流直播
Jun 16 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
Jan 09 #HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 #HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
Jan 09 #HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
Jan 09 #HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
Jan 09 #HTML / CSS
html5 Canvas画图教程(1)—画图的基本常识
Jan 09 #HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
Jan 08 #HTML / CSS
You might like
php字符串过滤与替换小结
2015/01/26 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
php常用数组函数实例小结
2016/12/29 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
文秘专业大学生求职信
2013/11/10 职场文书
洗发水广告词
2014/03/13 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
图书馆义工感想
2015/08/07 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
SQL写法--行行比较
2021/08/23 SQL Server