首页 > 想和大家请教一下CGAffineTransform里,矩阵相乘后得到的新坐标究竟是怎么出来的,什么含义

想和大家请教一下CGAffineTransform里,矩阵相乘后得到的新坐标究竟是怎么出来的,什么含义

最近在研究CGAffineTransform.
想先讲一下我对CGAffineTransform的理解.

struct CGAffineTransform
{
CGFloat a, b, c, d;
CGFloat tx, ty;
};

CGAffineTransform是二维的,可以理解为

其中,ad对应缩放,bc对应旋转,tx,ty对应位移

我看到大部分的教程说,公式可以总结为

x = ax+cy+tx
y = bx+dy+ty

具体的例如

移动:
CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

缩放:
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)

旋转:
CGAffineTransformMakeRotation(CGFloat angle)

现在有这样一段代码:

self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100,100, 200, 200)];
self.imageView.image = [UIImage imageNamed:@"123.jpg"];
[self.view addSubview:self.imageView];
NSLog(@"%@",NSStringFromCGRect(self.imageView.frame));


CGAffineTransform transform = CGAffineTransformIdentity;
transform = transform = CGAffineTransformMake(-0.5, 0, 0, 1, 0, 0);
self.imageView.layer.affineTransform = transform;

NSLog(@"%@",NSStringFromCGRect(self.imageView.frame));

通过代码可以得出 两次的log为

CALayerBaseDemo4[14986:1448501] {{100, 100}, {200, 200}}
2016-02-25 23:55:19.766 
CALayerBaseDemo4[14986:1448501] {{150, 100}, {100, 200}}

通过之前的公式

x = ax+cy+tx
y = bx+dy+ty

x = -0.5*100 + 0*100 + 0 x = -50
y = 0*100 + 1*100 + 0 y = 100

如果通过这么计算的话,应该是 {-50,100} 才对啊,问题是得到的结果是{150,100} 这事为什么呢?


师兄,这个问题解决了嘛?跟着你的思路走,貌似是你这个结果。
补充内容:
刚刚我又去网上搜索一下transeform矩阵相关,依照师兄你的计算最后x' = - 0.5x, y' = y,并不能直接以结果来确定你所说的(-50,100),应该对比着来看,x' = -0.5x是否可以理解为:仿射过后的图像x值被缩小了0.5倍,y' = y理解为前后不变;再加上图形本身的锚点坐标限制,图形被压缩。与师兄你的log信息才能对的上。不知道是不是这样理解的


我猜原因可能有这些:

之前研究过 CGAffineTransform,印象里有这些需要注意的。希望对你有用。

【热门文章】
【热门文章】