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 给背景设置渐变色的方法
Sep 12 HTML / CSS
css3中新增的样式使用示例附效果图
Aug 19 HTML / CSS
HTML5 Geolocation API的正确使用方法
Dec 04 HTML / CSS
Html5内唤醒百度、高德APP的实现示例
May 20 HTML / CSS
html5 跨文档消息传输示例探讨
Apr 01 HTML / CSS
HTML5+CSS3应用详解
Feb 24 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
Dec 15 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
Dec 26 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
Mar 15 HTML / CSS
HTML5新特性之语义化标签
Oct 31 HTML / CSS
canvas学习总结三之绘制路径-线段
Jan 31 HTML / CSS
HTML页面滚动时部分内容位置固定不滚动的实现
Apr 14 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
?生?D片??C字串
2006/12/06 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
JavaScript While 循环基础教程
2007/04/05 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
前端性能优化建议
2020/09/17 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
Python set集合类型操作总结
2014/11/07 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
python django中8000端口被占用的解决
2019/12/17 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
贯彻学习两会心得体会范文
2014/03/17 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
公司保洁员管理制度
2015/08/04 职场文书
小学教师教学反思
2016/02/24 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
创业计划书之家教中心
2019/09/25 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python