Canvas的quadraticCurveTo 和 bezierCurveTo 画曲线 方法细说

详细代码如下:
<!doctype html>
<html lang="en">
<head>
<script src="http://modernizr.com/downloads/modernizr-latest.js"></script>
<meta charset="UTF-8">
<title>quadraticCurveTo Example</title>
<script type="text/javascript">
window.addEventListener(‘load‘, eventWindowLoaded, false);
function eventWindowLoaded() {
         canvasApp();
}
function canvasSupport () {
        return Modernizr.canvas;
}
function canvasApp(){
   if (!canvasSupport()) {
         return;
   }else{
       var theCanvas = document.getElementById("canvas");
       var ctx = theCanvas.getContext("2d");
   }

   var x1=350,y1 = 250,x2 = 440,y2 = 550,x = 400,y = 500;
   var fan = 1,fan1 = 1;
function drawScreen() {

   ctx.clearRect(100,100,600,600);
   ctx.beginPath();
   ctx.strokeStyle="#000";
   ctx.moveTo(300,300);
   ctx.quadraticCurveTo(x1,y1,x,y);
   ctx.stroke();
   ctx.beginPath();
   ctx.strokeStyle = "rgba(255,0,0,0.5)";
   ctx.moveTo(300,300);
   ctx.lineTo(x1,y1);
   ctx.lineTo(x,y);
   ctx.moveTo(300,300);
   ctx.lineTo(x,y);
   ctx.stroke();
   if(x1 > 600) {
    fan = -1;
   } else if (x1 < 200) {
    fan = 1;
   }
   if(y1 > 600) {
    fan1 = -1;
   } else if (y1 < 200) {
    fan1 = 1;
   }
   x1 += fan;
   y1 += fan1;
   setTimeout(drawScreen,22);
  }
   drawScreen();
}
</script>
</head>
<body>
<div style="position: absolute; top: 50px; left: 50px;">
<canvas id="canvas" width="500" height="500">
Your browser does not support HTML5 Canvas.
</canvas>
</div>
</body>
</html>


 

context.quadraticCurveTo(cpx, cpy, x, y) 方法参数包含两个点,一个是(cpx,cpy)控制点,就是上图所示的90度角所在的那个点,为何叫控制点,说白了就是这一点控制曲线(Curve)的角度,你可以想象一下这个点前后左右各个方向移动

这个曲线的变化情况,如果你能想象出来,说明你理解了。(x,y)表示终点,就是上图三角最下面的点。那有人就问了 起点怎么没有地方定义,ok,这必须用到moveTo:ctx.moveTo(300,300); 意思从这个起点开始画弧线。

我们这里用到clearRect,每次画线之前都清除一下画布,重新绘画,这样配合setTimeout ,这个动画效果就出来了,从动画中就可以看出来,控制点的作用了。

bezierCurveTo :context.bezierCurveTo(x1, y1, x2, y2, x, y)(x1,y1)控制点1,(x2,y2)控制点2,(x,y)即为结束点,开始点在哪的,同样是用lineTo. 从上图可以看出两个控制点控制了曲线的细缓平滑,有强迫症的人似乎更能理解。
<!doctype html>
<html lang="en">
<head>
<script src="http://modernizr.com/downloads/modernizr-latest.js"></script>
<meta charset="UTF-8">
<title>quadraticCurveTo Example</title>
<script type="text/javascript">
window.addEventListener(‘load‘, eventWindowLoaded, false);
function eventWindowLoaded() {
canvasApp();
}
function canvasSupport () {
return Modernizr.canvas;
}
function canvasApp(){
if (!canvasSupport()) {
return;
}else{
var theCanvas = document.getElementById("canvas");
var ctx = theCanvas.getContext("2d");
}
function drawScreen() {
var x1=450, //控制点1的x坐标
y1 = 300, //控制点1的y
x2 = 450, //控制点2的x
y2 = 500,//控制点2的y
x = 300, //终点x
y = 500;//终点y
ctx.moveTo(300,300);//起点
ctx.beginPath();
ctx.lineWidth = 5;
ctx.strokeStyle = "rgba(0,0,0,1)"
ctx.moveTo(300,300);
ctx.bezierCurveTo(x1,y1,x2,y2,x,y);
ctx.stroke();
//开始画辅助线
ctx.beginPath();
ctx.strokeStyle = "rgba(255,0,0,0.5)";
ctx.lineWidth = 1;
// 连接起点和控制点1
ctx.moveTo(300,300);
ctx.lineTo(x1,y1);
// 连接终点和控制点2
ctx.moveTo(x2,y2);
ctx.lineTo(x,y);
// 连接起点与终点(基线)
ctx.moveTo(300,300);
ctx.lineTo(x,y);
ctx.stroke();
}
  drawScreen();
}
</script>
</head>
<body>
<div style="position: absolute; top: 50px; left: 50px;">
<canvas id="canvas" width="500" height="500">
Your browser does not support HTML5 Canvas.
</canvas>
</div>
</body>
</html>

最近自己在学习canvas中,主要看的资料是HTML5 Canvas,Second Edition,有700多页,不知道有没有中文版,反正我是FQ下载的,配合网络资料,学习心得会不断更新。
时间: 2024-10-07 09:11:37

Canvas的quadraticCurveTo 和 bezierCurveTo 画曲线 方法细说的相关文章

[转]html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法

前面的文章我已经讲了3种在canvas中画曲线的方法:arc,arcTo以及quadraticCurveTo.他们都有一个共同点,就是他们画的曲线都只能偏向一边,今天讲的bezierCurveTo与他们最大的不同点就是有两个控制点,即可以画出S形的曲线了. bezierCurveTo,也就是所谓的贝赛尔曲线了,如果你学过某些画图工具,就能马上理解. bezierCurveTo的语法如下: ctx.bezierCurveTo(x1,y1,x2,y2,x,y);他的参数我照例解释一下,其中的(x1,

[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

继续讲canvas中画曲线的方法,今天讲quadraticCurveTo. 说实话这个方法有点吓人,单从函数名称上都可以初体验.话说,我觉得有必要把这个函数名缩短. quadratic的意思是二次,即数学中二次元方程那个二次.而ctx.quadraticCurveTo的参数如下: 代码如下: ctx.quadraticCurveTo(x1,y1,x,y); 其中x,y是终点的坐标,而x1,y1是曲线控制点的坐标?什么?你问我起点在哪里?起点在此之前用moveTo确定. 我之所以把控制点的坐标带上

[转]html5 Canvas画图教程(5)—canvas里画曲线之arc方法

在canvas画线条这篇文章中,我讲了画直线的方法,按理这篇画曲线的文章早该发了,但由于canvas画曲线比较特殊,我还没摸透,所以要一步步尝试. canvas里画曲线的难点之一,就在于他连曲线的函数就有4个!分别是arc,arcTo,quadraticCurveTo,bezierCurveTo.我从最简单的arc方法讲起吧. arc的作用是画一个正规的圆弧,可以是一个完整的圆,也可以是一个圆的某一段弧线. arc的语法如下: 代码如下: context.arc(x, y, radius, st

[转]html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法

arc与arcTo,从名字都能看出来相似.arcTo也是画曲线的方法,而且他画出的曲线也是正圆的一段弧线.但他的参数和arc简直是不共戴天~ ctx.arcTo(x1,y1,x2,y2,radius);arcTo的参数中包括两个点,而且这两个点中并没有表示圆心的点,仅仅最后的参数是圆的半径,表示arcTo和圆有那么点关系. 网上关于arcTo的文章很少,好不容易找到一篇还是外国的:而且canvas画图木有直观工具,只能靠猜,arcTo害我猜了半天.. 为了直观的描述,我采取了一种辅助办法:arc

context.quadraticCurveTo() context.bezierCurveTo()详解

使用quadraticCurveTo()描绘2维的贝塞尔曲线,之前的坐标点与当前坐标点之间以2维贝塞尔曲线连接.参数cpx与cpy表示贝塞尔曲线的控制点坐标,参数x,y为新追加的坐标点,指定的坐标点都以canvas元素的左上端为基准点. 什么是贝塞尔曲线 所谓的贝塞尔就是根据控制点算出的曲线,当需要曲线时一般使用贝塞尔曲线绘画. quadraticCurveTo(cpx, cpy, x, y)方法由1个控制点与1个追加坐标点绘制2维贝塞尔曲线. context . bezierCurveTo(c

[ html canvas quadraticCurveTo ] canvas绘图quadraticCurveTo()属性研究实例演示

说实话这个方法有点吓人,单从函数名称上都可以初体验.话说,我觉得有必要把这个函数名缩短. quadratic的意思是二次,即数学中二次元方程那个二次.而ctx.quadraticCurveTo的参数如下: ctx.quadraticCurveTo(x1,y1,x,y); 其中x,y是终点的坐标,而x1,y1是曲线控制点的坐标?什么?你问我起点在哪里?起点在此之前用moveTo确定. 我之所以把控制点的坐标带上序号1,是因为后面讲的某个画曲线的函数有两个控制点,也就有x2,y2了,所以这里先打个预

Highcharts动态画曲线

使用Highcharts画曲线的过程中,有时候曲线个数是从数据库中取出来的,不能确定曲线的条数. 可以利用Highcharts里的addSeries函数进行动态添加曲线: 示例如下: 1 for(var i=0;i<=<%=intRet %>;i++){ 2 var chart = $('#container').highcharts(); 3 4 newstr=strArray.pop(); 5 6 tempArray = newstr.split('a'); 7 //用于剔出空值与0

PHP《将画布(canvas)图像保存成本地图片的方法》

用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审结束时用笔在平板电脑上进行电子签名. 这需要我们评审软件里提供这样一个功能:打开浏览器,登录,进入评审意见页,页面最下部有个方块区域,用户在这里用触摸笔进行签名,然后这个签名将会保持 的服务器上. 这样的一个需求在当时是让我大费周折,但如今想起来,如果用html5的canvas实现,真是太简单了.在

VC几种不同的画线方法

1. 画线 方法I:使用HDC (SDK模式) HDC hDC; hDC = ::GetDC(m_hWnd); //此处要用全局的::GetDC,否则默认用CDC的. MoveToEx(hDC, point1.x, point1.y, NULL); //MoveToEx,先移到初始点,然后再画线 LineTo(hDC, point2.x, point2.y); ::ReleaseDC(m_hWnd, hDC); //释放也要用全局::ReleaseDC 方法II:使用CDC(MFC模式) CDC