html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

发布时间:2018-12-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

画布绘图的环境通过translate(),scale(),rotate(),setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响。

函数 方法 描述 translate dx,dx 转换的量的 X 和 Y 大小 scale sx,sy 水平和垂直的缩放因子 rotate angle 旋转的量,用弧度表示。正值表示顺时针方向旋转,负值表示逆时针方向旋转。 setTransform a,b,c,d,e,f 水平缩放,水平倾斜(与旋转有关),垂直倾斜(与旋转有关,-水平倾斜),垂直缩放,水平移动,垂直移动 transform a,b,c,d,e,f 水平缩放,水平倾斜,垂直倾斜,垂直缩放,水平移动,垂直移动

translate() 方法为画布的变换矩阵添加水平的和垂直的偏移。参数dxdy添加给后续定义路径中的所有点。

scale() 方法为画布的当前变换矩阵添加一个缩放变换。缩放通过独立的水平和垂直缩放因子来完成。例如,传递一个值 2.0 和 0.5 将会导致绘图路径宽度变为原来的两倍,而高度变为原来的 1/2。指定一个负的sx值,会导致 X 坐标沿 Y 轴对折,而指定一个负的sy会导致 Y 坐标沿着 X 轴对折。

rotate() 方法通过指定一个角度,改变了画布坐标和 Web 浏览器中的 setTransform() 会将当前的变换矩阵重置为单位矩阵,然后构建新的矩阵。

transform() 添加一个新的变换矩阵,再次绘制矩形,调用 transform() 时,它都会在前一个变换矩阵上构建。

 

具体使用范例

我们在画布上绘制一个矩形。
 

  1 <!DOCTYPE html>  2 <html>  3 <body>  4   5 <canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">  6 Your browser does not support the HTML5 canvas tag.  7 </canvas>  8   9 <script> 10  11 var c=document.getElementById("myCanvas"); 12 var ctx=c.getContext("2d"); 13  14 ctx.fillStyle="yellow"; 15 ctx.fillRect(0,0,250,100) 16  17 </script> 18  19 </body> 20 </html>

然后画出的图形如下图所示:绘制范围就是从坐标(0,0)开始画一个宽高分别为250,100的矩形。

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

下面对这个矩形进行平移,缩放,旋转等操作。

1 平移

如果往中间平移的话,我们可以改变它的坐标值例如ctx.fillRect(25,25,250,100),就将矩形起始位置移动到了(25,25)。绘制出的效果如下图:

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

另外还有一种方法,我们可以通过context的translate方法移动画布,来达到同样的视觉效果。未变换前画布的原点在左上角,使用translate方法后相当于整个坐标系在平移。

注:在操作画布变换矩阵时,最好在变换前使用save方法保存记录画布当前状态,完成绘制后可以使用restore方法恢复变换前的矩阵状态。

 1 ctx.save(); 2 ctx.translate(25,25); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(0,0,250,100) 5 ctx.restore();
2 缩放

缩放矩形当然可以通过调整宽高的方式这里不再举例说明。

这里主要介绍通过context的scale方法缩放画布的方法,通过以下代码就可以将黄色矩形所缩小到原来的一半(如下图)。

 1 ctx.save(); 2 ctx.scale(0.5,0.5); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(25,25,250,100); 5 ctx.restore();

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

3 旋转

旋转图中矩形,就需要把画布矩阵状态通过rotate方法变换下了。rotate(Math.PI/6)就是将画布顺时针旋转30度,画出的矩形如下图。

 1 ctx.save(); 2 ctx.rotate(Math.PI/6); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(25,25,250,100) 5 ctx.restore();

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

4 确定中心点

通过图可以看出上面的缩放和旋转都是以画布左上角为中心进行的,如果我们需要以画布中心点为中心进行变换,需要在rotate和scale方法调用前去修正画布的坐标原点位置到画布占位的中心位置ranslate(width/2,height/2),然后进行缩放变换,之后再用ranslate(-width/2,-height/2)修正坐标系。如下代码:

 1 ctx.save(); 2 ctx.translate(width/2,height/2);//将画布坐标系原点移至中心 3 ctx.rotate(0.5,0.5);//如果是缩放,这里是缩放代码 4 ctx.translate(-width/2,-height/2);//修正画布坐标系 5 ctx.fillStyle="yellow"; 6 ctx.fillRect(25,25,250,100) 7 ctx.restore();

效果如下图:

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

5 设置矩阵

方法setTransform的六个参数上面已经提到,其实可以理解为缩放、旋转、移动的复合方法。当您调用 setTransform() 时,它都会重置前一个变换矩阵然后构建新的矩阵,因此在下面的例子中,不会显示红色矩形,因为它在蓝色矩形下面。

  1 var c=document.getElementById("myCanvas");  2 var ctx=c.getContext("2d");  3   4 ctx.fillStyle="yellow";  5 ctx.fillRect(0,0,250,100)  6   7 ctx.setTransform(1,Math.PI/6,-Math.PI/6,1,30,10);//两个1代表画布进行缩放,Math.PI/6表示顺时针旋转30度,(30,10)表示平移  8 ctx.fillStyle="red";  9 ctx.fillRect(0,0,250,100); 10  11 ctx.setTransform(1,Math.PI/6,-Math.PI/6,1,30,10); 12 ctx.fillStyle="blue"; 13 ctx.fillRect(0,0,250,100);

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

和setTransform类似的还有一个方法transform(),它们都有六个参数。但是不同的是每次调用 transform() 时,它都会在前一个变换矩阵上构建。如下代码中先绘制的红色矩形和上图的位置是一致的,画完红色矩形后,再次调用transform(1,Math.PI/6,-Math.PI/6,1,30,10)改变画布,这次变换是在当前画布状态上变换的所以画的蓝色矩形不会和红色的重叠。如下图看上去,红色和黄色的相对位置 与 蓝色和红色的相对位置 是一样的。

  1 var c=document.getElementById("myCanvas");  2 var ctx=c.getContext("2d");  3   4 ctx.fillStyle="yellow";  5 ctx.fillRect(0,0,250,100)  6   7 ctx.transform(1,Math.PI/6,-Math.PI/6,1,30,10);  8 ctx.fillStyle="red";  9 ctx.fillRect(0,0,250,100); 10  11 ctx.transform(1,Math.PI/6,-Math.PI/6,1,30,10); 12 ctx.fillStyle="blue"; 13 ctx.fillRect(0,0,250,100);

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

 

对canvas绘图感兴趣的,还可以参看此博文 https://www.cnblogs.com/fangsmile/p/5644611.html

 

画布绘图的环境通过translate(),scale(),rotate(),setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响。

函数 方法 描述 translate dx,dx 转换的量的 X 和 Y 大小 scale sx,sy 水平和垂直的缩放因子 rotate angle 旋转的量,用弧度表示。正值表示顺时针方向旋转,负值表示逆时针方向旋转。 setTransform a,b,c,d,e,f 水平缩放,水平倾斜(与旋转有关),垂直倾斜(与旋转有关,-水平倾斜),垂直缩放,水平移动,垂直移动 transform a,b,c,d,e,f 水平缩放,水平倾斜,垂直倾斜,垂直缩放,水平移动,垂直移动

translate() 方法为画布的变换矩阵添加水平的和垂直的偏移。参数dxdy添加给后续定义路径中的所有点。

scale() 方法为画布的当前变换矩阵添加一个缩放变换。缩放通过独立的水平和垂直缩放因子来完成。例如,传递一个值 2.0 和 0.5 将会导致绘图路径宽度变为原来的两倍,而高度变为原来的 1/2。指定一个负的sx值,会导致 X 坐标沿 Y 轴对折,而指定一个负的sy会导致 Y 坐标沿着 X 轴对折。

rotate() 方法通过指定一个角度,改变了画布坐标和 Web 浏览器中的 setTransform() 会将当前的变换矩阵重置为单位矩阵,然后构建新的矩阵。

transform() 添加一个新的变换矩阵,再次绘制矩形,调用 transform() 时,它都会在前一个变换矩阵上构建。

 

具体使用范例

我们在画布上绘制一个矩形。
 

  1 <!DOCTYPE html>  2 <html>  3 <body>  4   5 <canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">  6 Your browser does not support the HTML5 canvas tag.  7 </canvas>  8   9 <script> 10  11 var c=document.getElementById("myCanvas"); 12 var ctx=c.getContext("2d"); 13  14 ctx.fillStyle="yellow"; 15 ctx.fillRect(0,0,250,100) 16  17 </script> 18  19 </body> 20 </html>

然后画出的图形如下图所示:绘制范围就是从坐标(0,0)开始画一个宽高分别为250,100的矩形。

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

下面对这个矩形进行平移,缩放,旋转等操作。

1 平移

如果往中间平移的话,我们可以改变它的坐标值例如ctx.fillRect(25,25,250,100),就将矩形起始位置移动到了(25,25)。绘制出的效果如下图:

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

另外还有一种方法,我们可以通过context的translate方法移动画布,来达到同样的视觉效果。未变换前画布的原点在左上角,使用translate方法后相当于整个坐标系在平移。

注:在操作画布变换矩阵时,最好在变换前使用save方法保存记录画布当前状态,完成绘制后可以使用restore方法恢复变换前的矩阵状态。

 1 ctx.save(); 2 ctx.translate(25,25); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(0,0,250,100) 5 ctx.restore();
2 缩放

缩放矩形当然可以通过调整宽高的方式这里不再举例说明。

这里主要介绍通过context的scale方法缩放画布的方法,通过以下代码就可以将黄色矩形所缩小到原来的一半(如下图)。

 1 ctx.save(); 2 ctx.scale(0.5,0.5); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(25,25,250,100); 5 ctx.restore();

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

3 旋转

旋转图中矩形,就需要把画布矩阵状态通过rotate方法变换下了。rotate(Math.PI/6)就是将画布顺时针旋转30度,画出的矩形如下图。

 1 ctx.save(); 2 ctx.rotate(Math.PI/6); 3 ctx.fillStyle="yellow"; 4 ctx.fillRect(25,25,250,100) 5 ctx.restore();

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

4 确定中心点

通过图可以看出上面的缩放和旋转都是以画布左上角为中心进行的,如果我们需要以画布中心点为中心进行变换,需要在rotate和scale方法调用前去修正画布的坐标原点位置到画布占位的中心位置ranslate(width/2,height/2),然后进行缩放变换,之后再用ranslate(-width/2,-height/2)修正坐标系。如下代码:

 1 ctx.save(); 2 ctx.translate(width/2,height/2);//将画布坐标系原点移至中心 3 ctx.rotate(0.5,0.5);//如果是缩放,这里是缩放代码 4 ctx.translate(-width/2,-height/2);//修正画布坐标系 5 ctx.fillStyle="yellow"; 6 ctx.fillRect(25,25,250,100) 7 ctx.restore();

效果如下图:

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

5 设置矩阵

方法setTransform的六个参数上面已经提到,其实可以理解为缩放、旋转、移动的复合方法。当您调用 setTransform() 时,它都会重置前一个变换矩阵然后构建新的矩阵,因此在下面的例子中,不会显示红色矩形,因为它在蓝色矩形下面。

  1 var c=document.getElementById("myCanvas");  2 var ctx=c.getContext("2d");  3   4 ctx.fillStyle="yellow";  5 ctx.fillRect(0,0,250,100)  6   7 ctx.setTransform(1,Math.PI/6,-Math.PI/6,1,30,10);//两个1代表画布进行缩放,Math.PI/6表示顺时针旋转30度,(30,10)表示平移  8 ctx.fillStyle="red";  9 ctx.fillRect(0,0,250,100); 10  11 ctx.setTransform(1,Math.PI/6,-Math.PI/6,1,30,10); 12 ctx.fillStyle="blue"; 13 ctx.fillRect(0,0,250,100);

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

和setTransform类似的还有一个方法transform(),它们都有六个参数。但是不同的是每次调用 transform() 时,它都会在前一个变换矩阵上构建。如下代码中先绘制的红色矩形和上图的位置是一致的,画完红色矩形后,再次调用transform(1,Math.PI/6,-Math.PI/6,1,30,10)改变画布,这次变换是在当前画布状态上变换的所以画的蓝色矩形不会和红色的重叠。如下图看上去,红色和黄色的相对位置 与 蓝色和红色的相对位置 是一样的。

  1 var c=document.getElementById("myCanvas");  2 var ctx=c.getContext("2d");  3   4 ctx.fillStyle="yellow";  5 ctx.fillRect(0,0,250,100)  6   7 ctx.transform(1,Math.PI/6,-Math.PI/6,1,30,10);  8 ctx.fillStyle="red";  9 ctx.fillRect(0,0,250,100); 10  11 ctx.transform(1,Math.PI/6,-Math.PI/6,1,30,10); 12 ctx.fillStyle="blue"; 13 ctx.fillRect(0,0,250,100);

html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale

 

对canvas绘图感兴趣的,还可以参看此博文 https://www.cnblogs.com/fangsmile/p/5644611.html

 

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! html5教程,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale全部内容,希望文章能够帮你解决html5教程-Canvas绘图之平移translate、旋转rotate、缩放scale所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:HTML