2009-05-19 166 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。也就是說,您應用這些事項的順序。