使用canvas绘制贝塞尔曲线


Posted in HTML / CSS onDecember 17, 2014

1、二次贝塞尔曲线

quadraticCurveTo(cpx,cpy,x,y)

//cpx,cpy表示控制点的坐标,x,y表示终点坐标;

数学公式表示如下:

二次方贝兹曲线的路径由给定点P0、P1、P2的函数B(t)追踪:

使用canvas绘制贝塞尔曲线

使用canvas绘制贝塞尔曲线

代码实例:

复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>canvas直线</title>
<meta name="Keywords" content="">
<meta name="author" content="@my_programmer">
<style type="text/css">
body, h1{margin:0;}
canvas{margin: 20px;}
</style>
</head>
<body onload="draw()">
<h1>二次贝塞尔曲线</h1>
<canvas id="canvas" width=200 height=200 style="border: 1px solid #ccc;"></canvas>
<script>
function draw() {
var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
//绘制起始点、控制点、终点
context.beginPath();
context.moveTo(20,170);
context.lineTo(130,40);
context.lineTo(180,150);
context.stroke(); </p> <p> //绘制2次贝塞尔曲线
context.beginPath();
context.moveTo(20,170);
context.quadraticCurveTo(130,40,180,150);
context.strokeStyle = "red";
context.stroke();
}
</script>
</body>
</html>

代码效果:

使用canvas绘制贝塞尔曲线

2、三次贝塞尔曲线

bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y)

//cp1x,cp1y表示第一个控制点的坐标,cp2x,cp2y表示第二个控制点的坐标,x,y表示终点的坐标;

数学公式表示如下:

P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝兹曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。

使用canvas绘制贝塞尔曲线

使用canvas绘制贝塞尔曲线

代码实例:

复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>canvas直线</title>
<meta name="Keywords" content="">
<meta name="Description" content="">
<style type="text/css">
body, h1{margin:0;}
canvas{margin: 20px; }
</style>
</head>
<body onload="draw()">
<h1>三次贝塞尔曲线</h1>
<canvas id="canvas" width=200 height=200 style="border: 1px solid #ccc;"></canvas>
<script>
function draw() {
var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
//绘制起始点、控制点、终点
context.beginPath();
context.moveTo(25,175);
context.lineTo(60,80);
context.lineTo(150,30);
context.lineTo(170,150);
context.stroke(); </p> <p> //绘制3次贝塞尔曲线
context.beginPath();
context.moveTo(25,175);
context.bezierCurveTo(60,80,150,30,170,150);
context.strokeStyle = "red";
context.stroke();
}
</script>
</body>
</html>

代码效果图:

使用canvas绘制贝塞尔曲线

是不是很炫酷的效果。。。HTML5+canvas真是个好玩的东西,上瘾了。

HTML / CSS 相关文章推荐
使用CSS3在触屏上为按钮实现激活效果
Sep 27 HTML / CSS
CSS3实现超慢速移动动画效果非常流畅无卡顿
Jun 15 HTML / CSS
布局和排版教程 纯css3实现图片三角形排列
Oct 17 HTML / CSS
详解CSS3中@media的实际使用
Aug 04 HTML / CSS
Css3实现无缝滚动防抖
Sep 14 HTML / CSS
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
Jan 06 HTML / CSS
突袭HTML5之Javascript API扩展3—本地存储全新体验
Jan 31 HTML / CSS
Html5新增标签有哪些
Apr 13 HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 HTML / CSS
Html5 滚动穿透的方法
May 13 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
Aug 16 HTML / CSS
纯html+css实现奥运五环的示例代码
Aug 02 HTML / CSS
使用canvas绘制超炫时钟
Dec 17 #HTML / CSS
24个canvas基础知识小结
Dec 17 #HTML / CSS
html5使用canvas绘制文字特效
Dec 15 #HTML / CSS
html5使用canvas绘制太阳系效果
Dec 15 #HTML / CSS
html5使用canvas绘制一张图片
Dec 15 #HTML / CSS
html5使用canvas画三角形
Dec 15 #HTML / CSS
html5使用canvas画空心圆与实心圆
Dec 15 #HTML / CSS
You might like
德劲1102收音机的打理维修案例
2021/03/02 无线电
php checkbox 取值详细说明
2010/08/19 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
jquery动态加载图片数据练习代码
2011/08/04 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
python读写LMDB文件的方法
2018/07/02 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Python高级property属性用法实例分析
2019/11/19 Python
python 数据类型强制转换的总结
2021/01/25 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
员工考核管理制度
2014/02/02 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
无传销社区工作方案
2014/05/13 职场文书
采购部长岗位职责
2014/06/13 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python