scale 缩放绘图
scale() 方法缩放当前绘图,更大或更小。
语法:context.scale(scalewidth,scaleheight);
参数:
scalewidth:缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)
scaleheight:缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%,)
备注:如果您对绘图进行缩放,所有之后的绘图也会被缩放。定位也会被缩放。如果您 scale(2,2),那么绘图将定位于距离画布左上角两倍远的位置。
rotate旋转绘图
rotate()方法旋转当前的绘图
语法:context.rotate(angle);
参数:旋转角度,以弧度计。如果需要将角度转换为弧度,使用degrees*Math.PI/180进行转换。
translate移动绘图
translate() 方法重新映射画布上的 (0,0) 位置。
语法:context.translate(x,y);
参数:x:添加到水平坐标x的值,y:添加到水平坐标y的值。
transform 绘图的转换矩阵
画布上的每个对象都拥有一个当前的变换矩阵。
transform() 方法替换当前的变换矩阵。它以下面描述的矩阵来操作当前的变换矩阵:
也就是说,transform() 允许您缩放、旋转、移动并倾斜当前的环境。
语法:context.transform(a,b,c,d,e,f);
参数:a:水平缩放绘图,b:水平倾斜绘图,c:垂直倾斜绘图,d:垂直缩放绘图,e:水平移动绘图,f:垂直移动绘图。
其二维坐标系的矩阵转换公式是:
其中等号左边的”x","y"是旧坐标值(prevCoordSys),等号右边的"x","y"是新坐标值(newCoordSys),a,b,c,d,e,f是需用用户来填写的变换参数,新就坐标就是通过一个矩阵运算的函数关系进行转换。
1、矩阵变换
矩阵变换公式是,或写成[1,0,0,1,tx,ty],其中tx和ty就是translate函数的两个参数,运算公式:
2、伸缩变换
矩阵变换公式是,或写成【sx,0,0,sy,0,0],其中sx,sy就是scale函数的两个参数,运算公式:
3、旋转变换
矩阵变换公式:,或写成[cos(a),sin(a),-sin(a),cos(a),0,0],其中a就是rotate要旋转的函数角度,运算公式:
4、x轴,y轴歪斜变换
,[1,0,tan(ax),1,0,0]
表示向x轴倾斜变换,[1,tan(ay),0,1,0,0]表示向y轴歪斜变换
setTransform重置当前转换为单位矩阵
画布上的每个对象都拥有一个当前的变换矩阵。
setTransform() 方法把当前的变换矩阵重置为单位矩阵,然后以相同的参数运行transform()
换句话说,setTransform() 允许您缩放、旋转、移动并倾斜当前的环境
语法:context.setTransform(a,b,c,d,e,f);
参数:同上面transform
示例代码:
<span style="font-family:Comic Sans MS;">var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); context.save(); context.scale(2, 2); context.strokeRect(10, 10, 100, 100); context.restore(); context.save(); context.rotate(10* Math.PI / 180); context.fillStyle = "yellow"; context.fillRect(300, 0, 250, 100) context.restore(); context.save(); context.translate(100, 30); context.fillStyle = "blue"; context.fillRect(500, 0, 120, 120); context.restore(); context.save(); context.transform(1.2, 0, 0, 1.2, 10, 10); context.fillStyle = "green"; context.fillRect(400, 260, 220, 120); context.restore(); context.save(); context.setTransform(1, 0.5, -0.5, 1, 30, 10); context.fillStyle = "red"; context.fillRect(100, 100, 250, 100); context.restore(); </span>