transform java_Transform 的简单理解

canvas里面的transfrom与css3中的基本是一样的,唯一的不同是圆点,canvas的默认顶点是图形的左上角,css3是图形的中心,

translate(x,y)方法

是用来移动canvas和它的原点到一个不同的位置,在做变形前,先保存状态是一个良好的习惯,

7c1dff355674e52a3eecfe04ef3e55c7.png

transform的例子

function draw() {

var ctx = document.getElementById('canvas').getContext('2d');

for (var i = 0; i < 3; i++) {

for (var j = 0; j < 3; j++) {

ctx.save();

ctx.fillStyle = 'rgb(' + (51 * i) + ', ' + (255 - 51 * i) + ', 255)';

ctx.translate(10 + j * 50, 10 + i * 50);

ctx.fillRect(0, 0, 25, 25);

ctx.restore();

}

}

}

旋转rotate(angle)

旋转的中心点始终是 canvas 的原点,如果要改变它,我们需要用到 translate 方法。

这个方法只接受一个参数:旋转的角度(angle),它是顺时针方向的,以弧度为单位的值。

rotate(angle)的例子

function draw() {

var ctx = document.getElementById('canvas').getContext('2d');

ctx.translate(75,75);

for (var i=1;i<6;i++){ // Loop through rings (from inside to out)

ctx.save();

ctx.fillStyle = 'rgb('+(51*i)+','+(255-51*i)+',255)';

for (var j=0;j

ctx.rotate(Math.PI*2/(i*6));

ctx.beginPath();

ctx.arc(0,i*12.5,5,0,Math.PI*2,true);

ctx.fill();

}

ctx.restore();

}

}

缩放scale(x, y)

我们用它来增减图形在 canvas 中的像素数目,对形状,位图进行缩小或者放大。

方法接受两个参数。x,y 分别是横轴和纵轴的缩放因子,它们都必须是正值。值比 1.0 小表示缩小,比 1.0 大则表示放大,值为 1.0 时什么效果都没有。

变形 Transform

ctx.transform(a, b, c, d, e, f)

这个函数的参数各自代表如下:

a:水平方向的缩放

b:水平方向的倾斜偏移

c:竖直方向的倾斜偏移

d:竖直方向的缩放

e:水平方向的移动

f:竖直方向的移动

缩放:scale(a, d) 等同于 matrix(a, 0, 0, d, 0, 0);

平移:translate(e, f) 等同于 matrix(1, 0, 0, 1, e, f);

旋转:rotate(deg) 等同于 matrix(cos(deg), sin(deg), -sin(deg), cos(deg), 0, 0);

resetTransform() 重置当前变形为单位矩阵,它和调用以下语句是一样的:ctx.setTransform(1, 0, 0, 1, 0, 0);

transform / setTransform 的例子

function draw() {

var ctx = document.getElementById('canvas').getContext('2d');

var sin = Math.sin(Math.PI/6);

var cos = Math.cos(Math.PI/6);

ctx.translate(100, 100);

var c = 0;

for (var i=0; i <= 12; i++) {

c = Math.floor(255 / 12 * i);

ctx.fillStyle = "rgb(" + c + "," + c + "," + c + ")";

ctx.fillRect(0, 0, 100, 10);

ctx.transform(cos, sin, -sin, cos, 0, 0);

}

ctx.setTransform(-1, 0, 0, 1, 100, 100);

ctx.fillStyle = "rgba(255, 128, 255, 0.5)";

ctx.fillRect(0, 50, 100, 100);

}

e8a92645481ef79c5d6f60e51b25d238.png

上面的代码ctx.setTransform(-1, 0, 0, 1, 100, 100);是什么意思?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值