ios - CGRectApplyAffineTransform 然后 CGAffineTransformInvert 不会返回到原始位置

标签 ios objective-c cgaffinetransform

这似乎不可能,我确信有一个简单的解决方案,但我无法解决。我的高中矩阵数学有点生疏:)

我正在构建一个 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 : 您可以通过调用函数CGRectApplyAffineTransformCGRect 结构进行操作。此函数返回包含传递给它的矩形的变换角点的最小矩形。如果对矩形进行操作的仿射变换仅执行缩放和平移操作,则返回的矩形与由四个变换角构成的矩形重合。

关于ios - CGRectApplyAffineTransform 然后 CGAffineTransformInvert 不会返回到原始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585759/

相关文章:

ios - 缩放 ScrollView 内的旋转图像以适合(填充)覆盖矩形的框架

ios - 更改 UIBarButtonItem 文本字体大小和颜色

ios - UIScrollView 不滚动也没有出现在正确的位置

objective-c - 如何在 UIWebview 中保存本地加载的 HTML 文件

objective-c - 缺少依赖目标 "<PBXTargetDependency:0x201d16ca0:<no cached name>>"

objective-c - UIView 的转换看起来很糟糕

UIImageView 的 Swift 3D 旋转(CGAffineTransform 或 CATransform3D)

ios - 使用唯一键快速合并字典

ios - 安装错误 "The packet is unknown"是什么意思?

objective-c - 如何根据对象字符串属性在 Xcode 中设置条件断点?