有像函数:“变换”和“仿射变换”之间的区别在哪里?
CATransform3DGetAffineTransform
返回仿射变换通过 't' 表示 。如果't'不能被 恰好表示为仿射 变换,返回值是 未定义。
我不是那么以数学为导向,所以一个容易理解的描述将是非常好的。维基百科在这里没有什么大的帮助。
有像函数:“变换”和“仿射变换”之间的区别在哪里?
CATransform3DGetAffineTransform
返回仿射变换通过 't' 表示 。如果't'不能被 恰好表示为仿射 变换,返回值是 未定义。
我不是那么以数学为导向,所以一个容易理解的描述将是非常好的。维基百科在这里没有什么大的帮助。
CoreAnimation使用3D变换。仿射变换是这些3D变换的2D子集。它们只允许在X,Y计划中进行平移,旋转和缩放。
这是不正确的 - 仿射变换是保持共线性和距离比率的变换。翻译,旋转,缩放等等也都是三维的。 – 2009-05-19 13:18:03
仿射变换是变换不“过分扭曲”几何体在这个意义上:
所以旋转和缩放是仿射投影,例如,不是。
仿射变换是变换,但变换不一定是仿射。例如,飞机的剪切不是仿射的,因为它不会将线条发送到线条。
仿射变换定义为保留距离比率并将线条发送到线条(保留“共线性”)的那些变换。在有限维欧几里得几何中,这些通过线性变换,接着是平移,即x -> Ax + b
,其中x
是矢量,A
是线性变换,而b
是矢量。
仿射变换对于改变坐标系很有用,可能是因为很难将其视觉化回常规坐标系。
实践中可能遇到的仿射变换是平移,扩张(即缩放),旋转和反射。如果您正在为iOS开发,请查看开发者文档的CGAffineTransform
部分。这些将解释如何使用多种便利方法创建仿射变换,以及如何使用-setTransform
消息将它们应用于UIView实例。
最后,关于仿射变换的重要一点是,他们在组成不可交换:应用变换,然后变换T2
T1
是不同一般的应用T2
其次T1
。也就是说,您应用这些事项的顺序。
这与此问题类似:http://stackoverflow.com/questions/567829/catransform3d-vs-cgaffinetransform – 2009-05-19 17:56:36