使用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 3D立方体效果示例-transform也不过如此
Dec 05 HTML / CSS
CSS3转换功能transform主要属性值分析及实现分享
May 06 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
使用CSS3的appearance属性改变元素的外观的方法
Dec 12 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
Nov 01 HTML / CSS
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
Jul 19 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
Mar 01 HTML / CSS
HTML5录音实践总结(Preact)
May 07 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
Sep 16 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
Oct 19 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 HTML / CSS
HTML中的表单Form实现居中效果
May 25 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
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
javascript forEach通用循环遍历方法
2010/10/11 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python画图学习入门教程
2016/07/01 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python连接mysql方法及常用参数
2020/09/01 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
python 制作简单的音乐播放器
2020/11/25 Python
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
新农村建设标语
2014/06/24 职场文书
人力资源管理求职信
2014/08/07 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
使用python绘制分组对比柱状图
2022/04/21 Python
Python面试不修改数组找出重复的数字
2022/05/20 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers