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
CSS3制作文字半透明倒影效果的两种实现方式
Aug 08 HTML / CSS
结合CSS3的布局新特征谈谈常见布局方法
Jan 22 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
Mar 02 HTML / CSS
css3实现简单的白云飘动背景特效
Oct 28 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
Dec 13 HTML / CSS
html5贪吃蛇游戏使用63行代码完美实现
Jun 25 HTML / CSS
Html5+JS实现手机摇一摇功能
Apr 24 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
Mar 25 HTML / CSS
H5 canvas实现贪吃蛇小游戏
Jul 28 HTML / CSS
Html5导航栏吸顶方案原理与对比实现
Jun 10 HTML / CSS
css3应用示例:新增的选择器
Mar 16 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的Yii框架中的属性(Property)
2016/03/18 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
js实现简单的验证码
2015/12/25 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
Python MD5文件生成码
2009/01/12 Python
python实现多线程的两种方式
2016/05/22 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
对pandas中Series的map函数详解
2018/07/25 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
报到证办理个人委托书
2014/10/06 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis
MySQL学习必备条件查询数据
2022/03/25 MySQL