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个性化字体_动力节点Java学院整理
Jul 12 HTML / CSS
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
Sep 02 HTML / CSS
css3实例教程 一款纯css3实现的发光屏幕旋转特效
Dec 07 HTML / CSS
全方位了解CSS3的Regions扩展
Aug 07 HTML / CSS
纯CSS3绘制打火机动画火焰效果
Jul 18 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
Jun 13 HTML / CSS
详解HTML5中的Communication API基本使用方法
Jan 29 HTML / CSS
【HTML5】Canvas绘制简单图片教程
May 13 HTML / CSS
HTML5中原生的右键菜单创建方法
Jun 28 HTML / CSS
html5实现滑块功能之type="range"属性
Feb 18 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
Dec 14 HTML / CSS
CSS子盒子水平和垂直居中的五种方法
Jul 23 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/08/07 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
php获取汉字首字母的函数
2013/11/07 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
外企C语言笔试题
2013/11/10 面试题
个人简历自荐信
2013/12/05 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
中学教师个人总结
2015/02/10 职场文书
仙境之桥观后感
2015/06/16 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
python获取字符串中的email
2022/03/31 Python
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android