Mar*_*rov 20 math objective-c cgaffinetransform
我发现了一个关于获得旋转的类似问题,但正如我所理解的那样,缩放和旋转工作在变换矩阵中是不同的.
Matrixes不是我的力量,所以如果有人会暗示我如何只获得CGAffineTransform 的扩展,我会非常感激.
顺便说一句.我尝试在CGSize上应用CGAffineTransform,然后获得高度x宽度以查看它缩放了多少,但是高度x宽度具有奇怪的值(取决于在CGAffineTransform中找到的旋转,所以... hm不起作用)
Isa*_*aac 45
假设转换是一个缩放后跟一个旋转(可能有一个平移,但没有倾斜),水平比例因子是sqrt(a^2+c^2),垂直比例因子是sqrt(b^2+d^2),水平比例因子与垂直比例因子的比率应该是a/d = -c/b其中a,b,c,和d是的六个成员4 CGAffineTransform,每文档(tx和ty仅代表翻译,这不影响比例因子).
| a b 0 |
| c d 0 |
| tx ty 1 |
Run Code Online (Sandbox Code Playgroud)
eve*_*Guy 30
- (CGFloat)xscale {
CGAffineTransform t = self.transform;
return sqrt(t.a * t.a + t.c * t.c);
}
- (CGFloat)yscale {
CGAffineTransform t = self.transform;
return sqrt(t.b * t.b + t.d * t.d);
}
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但我还是会根据有需要添加更多信息.
对我来说,获得缩放,转换旋转和再现它的好答案和示例代码来自文章:
http://www.informit.com/articles/article.aspx?p=1951182
我不熟悉CGAffineTransform或Objective-C(你用数学标签抓住了我).通常,您需要单独退出转换.例如,如果仿射变换A仅执行缩放,旋转和平移(缩放和旋转的顺序在下面的方法中并不重要,但翻译应该绝对是最后的):
转换:将A应用于向量(0,0)将返回结果(tx,ty),其中tx和ty分别是X和Y方向的平移.
在X中缩放:将A应用于向量(1,0)并获取(sx0 + tx,sx1 + ty).X中的缩放将是sqrt(sx0 ^ 2 + sx1 ^ 2)
在Y中缩放:将A应用于向量(0,1)并获取(sy0 + tx,sy1 + ty).Y中的缩放将是sqrt(sy0 ^ 2 + sy1 ^ 2)
由于仿射变换由简单的技巧与线性变换实现,因为线性变换是不可交换的,你需要了解的转变是如何通过如何把个人改造的实际出发前,工作有序.
| 归档时间: |
|
| 查看次数: |
19293 次 |
| 最近记录: |