这似乎不可能,我确信有一个简单的解决方案,但我无法解决。我的高中矩阵数学有点生疏:)
我正在构建一个 CGAffineTransform
来对 CGRect
进行平移-旋转-平移,然后尝试使用逆向 CGAffineTransformInvert回到原来的位置。但事实并非如此。我已经设法将其减少为:
// start building the transform...
// translate so (0,0) is at centre of image
CGAffineTransform affine = CGAffineTransformMakeTranslation(-100, -100);
// add a rotate
affine = CGAffineTransformConcat(affine, CGAffineTransformMakeRotation(M_PI/4));
// get the inverse
CGAffineTransform inverseAffine = CGAffineTransformInvert(affine);
// now test this: pick a starting CGRect
CGRect start = CGRectMake(50, 40, 10, 20);
// use my CGAffineTransform to move "start" to "midpoint"
CGRect midpoint = CGRectApplyAffineTransform(start, affine);
// use the inverse to move "midpoint" to "finish"
CGRect finish = CGRectApplyAffineTransform(midpoint, inverseAffine);
// what did we get
NSLog(@"start %5.1f %5.1f %5.1f %5.1f", start.origin.x, start.origin.y, start.size.width, start.size.height);
NSLog(@"midpoint %5.1f %5.1f %5.1f %5.1f", midpoint.origin.x, midpoint.origin.y, midpoint.size.width, midpoint.size.height);
NSLog(@"finish %5.1f %5.1f %5.1f %5.1f", finish.origin.x, finish.origin.y, finish.size.width, finish.size.height);
输出看起来像这样:
2011-09-29 ... start 50.0 40.0 10.0 20.0
2011-09-29 ... midpoint -7.1 -77.8 21.2 21.2
2011-09-29 ... finish 40.0 35.0 30.0 30.0
结束矩形不应该与开始矩形相同吗?这不是 CGAffineTransformInvert
应该做的吗?
如果我做同样的事情但使用 CGPoint
而不是 CGRect
它似乎工作正常。
最佳答案
复制自documentation :
您可以通过调用函数CGRectApplyAffineTransform
对CGRect
结构进行操作。此函数返回包含传递给它的矩形的变换角点的最小矩形。如果对矩形进行操作的仿射变换仅执行缩放和平移操作,则返回的矩形与由四个变换角构成的矩形重合。
关于ios - CGRectApplyAffineTransform 然后 CGAffineTransformInvert 不会返回到原始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585759/