HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线


Posted in HTML / CSS onJanuary 01, 2015

在HTML5 Canvas中,可以用以下方法描画三阶和二阶的贝塞尔曲线:

复制代码
代码如下:

context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
context.quadraticCurveTo(cpx, cpy, x, y)

贝塞尔曲线是在二维平面上由一个“起始点”,一个“结束点”,以及一个或多个“控制点”定义的曲线。普通的三阶贝塞尔曲线使用两个控制点,而二阶曲线则只使用一个控制点。

要描画二阶贝塞尔曲线,只需设置结束点的坐标和控制点的坐标即可:

复制代码
代码如下:

context.moveTo(0,0);
context.quadraticCurveTo(100,25,0,50);

代码执行结果如下:

HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线

上面例子中的曲线从坐标(0,0)开始,到(0,50)结束,而用于控制曲线描绘的控制点的坐标为(100,25)。

相比二阶曲线,由于可以设置两个控制点,三阶贝塞尔曲线的描画更为灵活。下面的代码描画了一条”S”形的曲线:

复制代码
代码如下:

context.moveTo(150,0);
context.bezierCurveTo(0,125,300,175,150,300);

HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线

译注1:关于贝塞尔曲线,可以参考Wikipedia上的条目(http://en.wikipedia.org/wiki/Bézier_curve),其中的动画很好地诠释了贝塞尔曲线的生成机制。

译注2:目前HTML5 Canvas最高仅支持三阶贝塞尔曲线,四阶以上的曲线尚不支持。

HTML / CSS 相关文章推荐
CSS3制作日历实现代码
Jan 21 HTML / CSS
CSS3提交意见输入框样式代码
Oct 30 HTML / CSS
CSS3使用border-radius属性制作圆角
Dec 22 HTML / CSS
举例详解CSS3中的Transition
Jul 15 HTML / CSS
CSS3中新增的对文本和字体的设置
Feb 03 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
Mar 25 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
Dec 13 HTML / CSS
用HTML5制作烟火效果的教程
May 12 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
Dec 20 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
Dec 11 HTML / CSS
H5离线存储Manifest原理及使用
Apr 28 HTML / CSS
HTML5 FileReader对象的具体使用方法
May 22 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
Dec 30 #HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 #HTML / CSS
html5中 media(播放器)的api使用指南
Dec 26 #HTML / CSS
浅谈html5 响应式布局
Dec 24 #HTML / CSS
HTML5进度条特效
Dec 18 #HTML / CSS
html5+svg学习指南之SVG基础知识
Dec 17 #HTML / CSS
canvas需要在标签里直接定义宽高
Dec 17 #HTML / CSS
You might like
把77A收信机改造成收音机
2021/03/02 无线电
php表单转换textarea换行符的方法
2010/09/10 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python实现选择排序
2017/06/04 Python
Python分析学校四六级过关情况
2017/11/22 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
工程监理应届生求职信
2013/11/09 职场文书
大四学年自我鉴定
2013/11/13 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
初中学校军训方案
2014/05/09 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
2015新年寄语大全
2014/12/08 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书