使用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实现的win8加载动画的实例分析
Dec 11 HTML / CSS
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
Dec 30 HTML / CSS
css3编写浏览器背景渐变背景色的方法
Mar 05 HTML / CSS
CSS3实现全景图特效示例代码
Mar 26 HTML / CSS
纯CSS3制作页面切换效果的实例代码
May 30 HTML / CSS
HTML5 实现一个访问本地文件的实例
Dec 13 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
Jan 07 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
Jun 06 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
May 14 HTML / CSS
实例讲解HTML5的meta标签的一些应用
Dec 08 HTML / CSS
5个HTML5的常用本地存储方式详解与介绍
Mar 27 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
小谈php正则提取图片地址
2014/03/27 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python3.4爬虫demo
2019/01/22 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python plotly画柱状图代码实例
2019/12/13 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Python执行时间的几种计算方法
2020/07/31 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
网络教育自我鉴定
2014/02/04 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
珍爱生命主题班会
2015/08/13 职场文书
mysql 索引合并的使用
2021/08/30 MySQL