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+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
CSS3实现内凹圆角的实例代码
May 04 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
Jan 08 HTML / CSS
IE支持HTML5的解决方法
Oct 20 HTML / CSS
使用HTML5里的classList操作CSS类
Jun 28 HTML / CSS
html5是什么_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
Aug 18 HTML / CSS
Ratchet 模态框的实现
Aug 19 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
Dec 02 HTML / CSS
html+css合并表格边框的示例代码
Mar 31 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 HTML / CSS
使用CSS设置滚动条样式
Jan 18 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
PHP 基本语法格式
2009/12/15 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
jquery 问答知识整理
2010/02/11 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
如何快速上手Vuex
2017/02/14 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
Python 如何在字符串中插入变量
2020/08/01 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
纪念9.18事变演讲稿
2014/09/14 职场文书
四风问题对照检查材料
2014/09/22 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
毕业设计致谢词
2015/05/14 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript