【问题标题】:Why did Apple flip their unit circle for UIBezierPath?为什么 Apple 为 UIBezierPath 翻转单位圆?
【发布时间】:2017-01-13 22:42:10
【问题描述】:

左边的图像是典型的单位圆的样子。右边的那个来自文档。我还没有看到更深入的解释为什么它在网上任何地方都被翻转了。为什么会这样?

【问题讨论】:

  • 我一直想知道同样的事情。我一直想知道这和他们使用的坐标系有什么关系,因为至少在UIKit 中,没有使用常规的笛卡尔坐标系。
  • 可能,因为 0, 0 是屏幕的左上角,但这仍然是一个非常不令人满意的答案。我敢肯定外面的一些聪明人知道。
  • @Rob - 对于我们这些热爱数学的人,您应该将其发布为替代解释。干得好!
  • 总是让我感动的不是角度增加的方向,而是 0 位于右侧而不是顶部这一事实。我通常想做的是这样的:stackoverflow.com/a/32857428/341994
  • @Rob 我反对的不是惯例,而是我总是忘记的事实。

标签: ios core-graphics trigonometry uibezierpath


【解决方案1】:

圆的绘制通常由 x = center.x + r * cos(φ)y = center.y + r * sin(φ) 表示> 随着 φ02π。 使用标准笛卡尔坐标系,原点在左下角,这会导致画一个圆圈,从 3 点钟方向开始,逆时针方向。见下图左图。

但 iOS 坐标系的 y 轴从标准笛卡尔坐标系翻转,原点位于左上角,y 会随着您向下移动屏幕而增加。见下图:

(改编自 Quartz 2D Programming Guide 中的Coordinate Systems Apple 文档中的原始图表仅说明坐标系如何翻转,但我已将箭头更改为更准确地表示这如何影响从 0 到 π/2 的弧的绘制。)

结果是,当使用 iOS 坐标系时,它会从 3 点开始,然后顺时针进行。

【讨论】:

  • 您说正常坐标系从 3 开始,但逆时针方向旋转,但图像显示其他方式。图中的箭头代表什么。我从 Apple 的页面上阅读了该部分,但没有说明。
  • 我想添加这张图片,但不确定放入您的帖子是否有意义。 imgur.com/a/Q9uoY
  • @Biclops - Apple 文档中示例中的箭头(这是我在原始答案中包含的)并不是试图表示特定弧线的绘图,而只是说明任何绘图在 iOS 坐标系中水平翻转。在 Apple 的示例中,箭头没有任何意义,只是随机绘制的。但是,我可以看到 Apple 的图表在这种情况下是如何令人困惑的,所以我像在您的示例中一样对其进行了调整,以显示从 0 到 π/2 的弧线的绘制方向将在两个坐标系中呈现。谢谢。
  • 酷,我希望这对其他人有帮助。
【解决方案2】:

因为 iOS 将所有内容都颠倒过来。

在 OS X 中(几乎所有数学书籍,以及默认情况下来自 OS X 的 Core Graphics 中),原点位于左下角,并且 Y 轴随着您向上移动而增加。在该坐标系中,角度以您认为应该的方式布置。在 UIKit 的倒置坐标系中,一切都是翻转的。

有趣的是,角度的方向让你感到困扰,但奇怪的 Y 轴却没有。 (*) 程序员这种颠倒的直觉可能是 Apple 在编写 iOS 时翻转坐标系的原因,但您仍然可以在这里和那里看到工件。 (公平地说,模仿页面的布局代码,如文本视图和滚动视图,当 Y 向下增加时更容易计算。由于这些是非常常见的设计元素,UIKit 翻转轴并没有那么疯狂。它也表明这些东西在数学和计算机中是非常随意的。)

(*) 是的,你注意到了原点的位置,这可能是答案的一部分,但请允许我夸张地说下一点:D

【讨论】:

  • 感谢您的回答。有时使用 iOS 坐标空间,我感觉自己置身于一个颠倒的世界。从字面上和比喻上...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2013-09-07
相关资源
最近更新 更多