使用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实现轮播图效果实例
May 04 HTML / CSS
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
Apr 01 HTML / CSS
css3的@media属性实现页面响应式布局示例代码
Feb 10 HTML / CSS
CSS3弹性盒模型开发笔记(二)
Apr 26 HTML / CSS
css3使用animation属性实现炫酷效果(推荐)
Feb 04 HTML / CSS
基于CSS3的animation属性实现微信拍一拍动画效果
Jun 22 HTML / CSS
html5 兼容IE6结构的实现代码
May 14 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
Oct 20 HTML / CSS
HTML5 Canvas入门学习教程
Mar 17 HTML / CSS
HTML5和CSS3实例教程总结(推荐)
Jul 18 HTML / CSS
Html5元素及基本语法详解
Aug 02 HTML / CSS
css 中多种边框的实现小窍门
Apr 07 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHPMailer 中文使用说明小结
2010/01/22 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
javascript的函数作用域
2014/11/12 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
layui数据表格重载实现往后台传参
2019/11/15 Javascript
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
大学自我鉴定范文
2013/12/26 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
运动会的口号
2014/06/09 职场文书
大专生自荐书范文
2014/06/22 职场文书
立志成才演讲稿
2014/09/04 职场文书
技术员个人工作总结
2015/03/03 职场文书
客户付款通知书
2015/04/23 职场文书
开学第一周总结
2015/07/16 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python