“变换”和“仿射变换”之间的区别在哪里?

时间:2009-05-19 12:56:50

标签: iphone uikit core-animation

有一个功能:

  

CATransform3DGetAffineTransform

     

返回仿射变换   由't'代表。如果't'不能   确切地表示为仿射   转换返回值是   未定义。

我不是那么以数学为导向,因此易于理解的描述会非常好。维基百科在这里没什么大不了的。

3 个答案:

答案 0 :(得分:7)

仿射变换是指在以下意义上不会“过度扭曲”几何体的变换:

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

因此旋转和缩放是仿射的 - 例如,投影不是。

答案 1 :(得分:1)

仿射变换是转换,但转换不一定是仿射。例如,平面的剪切不是Affine,因为它不会将线发送到线。

仿射变换根据定义是那些保持距离比率并将线发送到线(保留“共线性”)的变换。在有限维欧几里德几何中,它们通过线性变换然后进行平移,即x -> Ax + b,其中x是向量,A是线性变换,b是矢量。

仿射变换对于改变坐标系统非常有用,可能从一个相当难以想象的系统转换到通常的坐标系。

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

最后,关于仿射变换的一个重要观点是它们在构图下不是可交换的:应用变换T1后跟变换T2通常不同于应用T2后跟{ {1}}。也就是说,您应用这些事项的顺序。

答案 2 :(得分:0)

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