【问题标题】:CGAffineTransform tanslationX or translatedByCGAffineTransform tanslationX 或 translateBy
【发布时间】:2021-09-09 12:09:28
【问题描述】:

我越来越糊涂了。

使用视觉,我将左下角坐标转换为左上角

CGAffineTransform(scaleX: 1, y: -1).translatedBy(x:0, y: -1)

但是根据方向旋转相机视图 I CGAffineTransform(translationX: 1, y: 0), rotated(by: -CGFloat.pi / 2)

为什么在第二种情况下我们使用 CGAffineTransform(translationX... 而不是 CGAffineTransform(scaleX..

两者有什么区别?

【问题讨论】:

  • 世界上的所有差异。缩放比例(更改大小)。翻译翻译(改变位置)。
  • 那么为什么要将左下角坐标转换为左上角我们使用比例尺呢?我们不应该使用翻译吗?这是来自 Apple 视频
  • 因为你不动,所以你在翻转。所以你颠倒比例。这就像把尺子翻过来一样。
  • 变换矩阵令人困惑,需要深入研究才能理解。购买一本关于 3D 图形的书并阅读关于变换矩阵的部分。然后使用示例应用程序并尝试组合平移、缩放、翻转和旋转。当一切都不像你预期的那样,回去再读一遍这本书。重复这一点,直到你开始得到它。
  • (一个令人困惑的事情是变换不是可交换的。应用它们的顺序会改变结果,并且需要仔细考虑找出正确的顺序来应用变换以获得所需的结果,即使在之后您了解它们的工作原理。)

标签: swift cgaffinetransform


【解决方案1】:

那么为什么要将左下角坐标转换到左上角,我们要使用比例尺

所以你的问题真的是:为什么是

CGAffineTransform(scaleX: 1, y: -1).translatedBy(x:0, y: -1)

如何翻转?

让我们从scale 部分开始。将y 坐标系缩放到-1 是一个乘法:它反转了比例,因此向上向下。这就是翻转。 (将x 缩放到1 只是意味着“别管它”。)

translate 部分是因为变换发生在原点周围(最初是左下角)。因此,当我们通过缩放翻转时,我们会立即将自己从屏幕上翻转。为了弥补这一点,我们滑回到屏幕上。

【讨论】:

    【解决方案2】:

    根据 Apple 文档,它们的含义完全不同:

    .translatedBy

    返回一个仿射变换矩阵,通过平移一个 现有的仿射变换。

    .scaledBy

    返回一个通过缩放一个仿射变换矩阵 现有的仿射变换。

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多