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中的border-radius(边框圆角)示例代码
Jul 19 HTML / CSS
两种CSS3伪类选择器详细介绍
Dec 24 HTML / CSS
利用CSS3实现折角效果实例源码
Sep 28 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
Jun 06 HTML / CSS
使用phonegap操作数据库的实现方法
Mar 31 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
Jan 08 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
Apr 29 HTML / CSS
Html5在手机端调用相机的方法实现
May 13 HTML / CSS
HTML5 背景的显示区域实现
Jul 09 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
Dec 07 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 cookie的操作实现代码(登录)
2010/12/29 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
php array_map()函数实例用法
2021/03/03 PHP
javascript函数库-集合框架
2007/04/27 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python对html代码进行escape编码的方法
2015/05/04 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
.NET现在共支持多少种语言
2014/02/26 面试题
公司营业员的自我评价
2014/03/04 职场文书
数控专业自荐书范文
2014/03/16 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
中学生学习保证书
2015/02/26 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
钱学森观后感
2015/06/04 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
redis protocol通信协议及使用详解
2022/07/15 Redis