【问题标题】:Where is the difference between an "transform" and an "affine transform"?“变换”和“仿射变换”之间的区别在哪里?
【发布时间】:2009-05-19 12:56:50
【问题描述】:

有这样的功能:

CATransform3DGetAffineTransform

返回仿射变换 用“t”表示。如果't'不能 精确地表示为仿射 变换返回值为 未定义。

我不是那么喜欢数学,所以一个易于理解的描述会非常好。维基百科在这里帮不上什么忙。

【问题讨论】:

标签: iphone uikit core-animation


【解决方案1】:

仿射变换是不会“过度扭曲”几何形状的变换:

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

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

【讨论】:

    【解决方案2】:

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

    仿射变换根据定义是那些保持距离比率并将线发送到线(保持“共线性”)的变换。在有限维欧几里得几何中,它们通过线性变换和平移来起作用,即x -> Ax + b 其中x 是一个向量,A 是一个线性变换,b 是一个向量。

    仿射变换非常适合改变坐标系,也许是从一个相当难以想象的坐标系回到通常的坐标。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这不是真的 - 仿射变换是保持共线性和距离比的变换。平移、旋转、缩放等在三个维度上也是仿射的。
      • 我应该明确回答的范围是 Cocoa 和 NSAffineTransform。
      猜你喜欢
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多