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 26 HTML / CSS
CSS3实战第一波 让我们尽情的圆角吧
Aug 27 HTML / CSS
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
Feb 27 HTML / CSS
详解rem 适配布局
Oct 31 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
Oct 17 HTML / CSS
HTML5标签与HTML4标签的区别示例介绍
Jul 18 HTML / CSS
html5教程实现Photoshop渐变色效果
Dec 04 HTML / CSS
canvas需要在标签里直接定义宽高
Dec 17 HTML / CSS
iframe跨域的几种常用方法
Nov 11 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
Sep 16 HTML / CSS
CSS 伪元素::marker详解
Jun 26 HTML / CSS
CSS实现渐变色边框(Gradient borders)的5种方法
Mar 25 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+Html+缓存
2006/12/20 PHP
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
Python实现视频下载功能
2017/03/14 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
网吧温馨提示
2015/07/17 职场文书
婚礼答谢词范文
2015/09/29 职场文书