2009-05-19 164 views
5

有像函数:“变换”和“仿射变换”之间的区别在哪里?

CATransform3DGetAffineTransform

返回仿射变换通过 't' 表示 。如果't'不能被 恰好表示为仿射 变换,返回值是 未定义。

我不是那么以数学为导向,所以一个容易理解的描述将是非常好的。维基百科在这里没有什么大的帮助。

+0

这与此问题类似:http://stackoverflow.com/questions/567829/catransform3d-vs-cgaffinetransform – 2009-05-19 17:56:36

回答

0

CoreAnimation使用3D变换。仿射变换是这些3D变换的2D子集。它们只允许在X,Y计划中进行平移,旋转和缩放。

+2

这是不正确的 - 仿射变换是保持共线性和距离比率的变换。翻译,旋转,缩放等等也都是三维的。 – 2009-05-19 13:18:03

6

仿射变换是变换不“过分扭曲”几何体在这个意义上:

  • 点上线铺设前仍躺在一条线之间的转换
  • 的相对距离后点保持不变(所以一个正方形可能不再是正方形,但仍具有相等的边长)

所以旋转和缩放是仿射投影,例如,不是。

1

仿射变换是变换,但变换不一定是仿射。例如,飞机的剪切不是仿射的,因为它不会将线条发送到线条。

仿射变换定义为保留距离比率并将线条发送到线条(保留“共线性”)的那些变换。在有限维欧几里得几何中,这些通过线性变换,接着是平移,即x -> Ax + b,其中x是矢量,A是线性变换,而b是矢量。

仿射变换对于改变坐标系很有用,可能是因为很难将其视觉化回常规坐标系。

实践中可能遇到的仿射变换是平移,扩张(即缩放),旋转和反射。如果您正在为iOS开发,请查看开发者文档的CGAffineTransform部分。这些将解释如何使用多种便利方法创建仿射变换,以及如何使用-setTransform消息将它们应用于UIView实例。

最后,关于仿射变换的重要一点是,他们在组成不可交换:应用变换,然后变换T2T1是不同一般的应用T2其次T1。也就是说,您应用这些事项的顺序。