使用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 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
用css3实现当鼠标移进去时当前亮其他变灰效果
Apr 08 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 HTML / CSS
基于html和CSS3制作酷炫的导航栏
Sep 23 HTML / CSS
CSS3近阶段篇之酷炫的3D旋转透视
Apr 28 HTML / CSS
CSS3中各种颜色属性的使用教程
May 17 HTML / CSS
纯css3使用vw和vh实现自适应的方法
Feb 09 HTML / CSS
css3实现二维码扫描特效的示例
Oct 29 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
Oct 20 HTML / CSS
使用html5 canvas 画时钟代码实例分享
Nov 11 HTML / CSS
HTML5新增加的功能详解
Sep 05 HTML / CSS
移动端html5模拟长按事件的实现方法
Sep 30 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
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php截取字符串函数分享
2015/02/02 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
Python Requests 基础入门
2016/04/07 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
python matlab库简单用法讲解
2020/12/31 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
违反工作纪律检讨书
2014/02/15 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
中华魂演讲稿
2014/05/13 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
趣味运动会简讯
2015/07/20 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript