博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas 贝塞尔曲线
阅读量:7047 次
发布时间:2019-06-28

本文共 2210 字,大约阅读时间需要 7 分钟。

1、二次贝塞尔曲线

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

数学公式表示如下:

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

\mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2t(1 - t)\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{ , } t \in [0,1]

代码实例:

 
<!
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(
20
,
170
);             context.lineTo(
130
,
40
);             context.lineTo(
180
,
150
);               context.stroke();                       
//
绘制2次贝塞尔曲线  
context.beginPath();             context.moveTo(
20
,
170
);             context.quadraticCurveTo(
130
,
40
,
180
,
150
);            context.strokeStyle 
=
"
red
"
;            context.stroke();           } 
</
script
>
</
body
>
</
html
>
 

代码效果:

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方向的“长度有多长”。

\mathbf{B}(t)=\mathbf{P}_0(1-t)^3+3\mathbf{P}_1t(1-t)^2+3\mathbf{P}_2t^2(1-t)+\mathbf{P}_3t^3 \mbox{ , } t \in [0,1]

代码实例:

 
<!
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();          
//
绘制3次贝塞尔曲线        
context.beginPath();          context.moveTo(
25
,
175
);          context.bezierCurveTo(
60
,
80
,
150
,
30
,
170
,
150
);          context.strokeStyle 
=
"
red
"
;          context.stroke();   } 
</
script
>
</
body
>
</
html
>
 

代码效果图:

转载于:https://www.cnblogs.com/ciangcic/p/3527943.html

你可能感兴趣的文章
Redis源码研究--跳表
查看>>
pymysql-sqlalchemy-orm
查看>>
易·school使用体验
查看>>
使用cxf构建webservice
查看>>
19.Kubernetes深入Pod之容器共享Volume
查看>>
Makefile中的变量和shell变量
查看>>
<转>ThinkPHP的开发常用系统配置项
查看>>
真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变
查看>>
大数据多维分析平台的实践
查看>>
Python常用函数
查看>>
二分法习题HDU2199
查看>>
strcpy,sprintf,memcpy的区别
查看>>
web框架
查看>>
线程互斥锁
查看>>
spring colud 博客
查看>>
Redis安装
查看>>
JavaScript 自学过程
查看>>
GDAL源码剖析(三)之Swig编译和帮助文档生成
查看>>
Android学习笔记:NDK入门一些总结
查看>>
Project Euler Problem 3: Largest prime factor
查看>>