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发光搜索表单分享
Apr 11 HTML / CSS
css3选择器基本介绍
Dec 15 HTML / CSS
CSS3过渡transition效果实例介绍
May 03 HTML / CSS
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
Nov 16 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
Jun 03 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
Aug 02 HTML / CSS
html5使用canvas画三角形
Dec 15 HTML / CSS
html5使用canvas绘制文字特效
Dec 15 HTML / CSS
用HTML5制作数字时钟的教程
May 11 HTML / CSS
html5默认气泡修改的代码详解
Mar 13 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
Jun 04 HTML / CSS
flex弹性布局详解
Mar 20 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 xfocus防注入资料
2008/04/27 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
xtree.js 代码
2007/03/13 Javascript
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
Vue组件中slot的用法
2018/01/30 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
python list多级排序知识点总结
2019/10/23 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
银行奉献演讲稿
2014/09/16 职场文书
高三教师工作总结2015
2015/07/21 职场文书
MySQL创建定时任务
2022/01/22 MySQL
vue修饰符.capture和.self的区别
2022/04/22 Vue.js