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 media queries + jQuery实现响应式导航
Sep 30 HTML / CSS
移动Web—CSS为Retina屏幕替换更高质量的图片
Dec 24 HTML / CSS
CSS3正方体旋转示例代码
Aug 08 HTML / CSS
谈谈对css属性box-sizing的了解
Jan 04 HTML / CSS
css3 transform过渡抖动问题解决
Oct 23 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
May 28 HTML / CSS
HTML5头部标签的一些常用信息小结
Oct 23 HTML / CSS
HTML5 文件上传下载的实例代码
Jul 03 HTML / CSS
详解HTML5 录音的踩坑之旅
Dec 26 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
Aug 13 HTML / CSS
css position fixed 左右双定位的实现代码
Apr 29 HTML / CSS
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
Dec 24 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/10/09 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
python super的使用方法及实例详解
2019/09/25 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
学python需要去培训机构吗
2020/07/01 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
Delphi软件工程师试题
2013/01/29 面试题
课例研修方案
2014/05/31 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android