【问题标题】:Why are graphics coordinates measured from the upper left?为什么图形坐标是从左上角开始测量的?
【发布时间】:2012-10-23 19:54:59
【问题描述】:

我注意到我曾经使用过的每个计算机图形系统都使用左手坐标系,其原点位于左上角。 Cairo、Java、Microsoft XYZ 和大多数图形程序都使用这个系统。我假设它们都可以追溯到一个共同的祖先,但我找不到任何关于此的参考。

如果我不得不猜测,我会说它来自 VGA 图形模式,使用与文本相同的坐标,这自然是基于从上到下、从左到右阅读英语的方式,并带有“第二行” 在“第一行”下面...但我正在弥补。

周围有没有人讲述这个故事,或者可以指出正确的历史书的方向?

【问题讨论】:

标签: canvas graphics coordinates history


【解决方案1】:

这是一个古老的约定,其原因可能有点杜撰。以下是我发现的一些假设:

它源自 CRT 电子束扫描行为。

从上到下扫描意味着您不必等待整个帧首先发送,您只需在开始接收数据时就开始扫描。 (这就又引出问题了,为什么要从上往下扫描)

它允许右手坐标系,Z 轴进入屏幕而不是离开屏幕。

令人讨厌的是,Cocoa 和 Quartz 使用左下原点。

【讨论】:

  • 有趣的是,我没有想到模拟电视背景。二维坐标约定是让 Z 出来,但确实可以“修复它”。通常在纸上开发数学,然后在编程后翻转它总是很有趣。
  • 没错。 CRT 在自上而下、从左到右的绘制上进行​​了标准化,因此视频硬件以与绘制相同的顺序对屏幕缓冲区布局进行了标准化。
【解决方案2】:

我怀疑这是由于遗留原因而保留的旧约定。 UpperLeft 的优势在于没有自下而上的语言书写系统。所以在 UpperLeft 更容易:

  • 放置多行文本
  • 使用未知或无限高的页面
  • 如果页面高度发生变化(即更大或更小的设备),在 BottomLeft 中您必须平移每个对象坐标,而在 UpperLeft 中则不需要。

最后一个还扩展到动态放置和布局,其中图形对象的坐标是与其父对象的偏移量

【讨论】:

    【解决方案3】:

    不知道。我不认为有一个确定的答案。很可能当人们仍然拥有基于控制台的机器时,从左上角向下到右下角是有意义的。正如您所说,这就是世界上很多人的阅读方式。把原点放在那里是有意义的。

    http://en.wikipedia.org/wiki/Memory-mapped_I/O

    维基百科文章有一些关于内存映射显示的信息。例如,我们将一部分内存用于关闭和打开屏幕上的像素。我们让地址 0 成为屏幕的左上角部分,并根据像素是否在内存中,分块移动打开和关闭像素。这基本上就是第一篇文章所说的。

    我不知道他们是否将地址 0 设置为显示的左上角,但这是有道理的,它可能只是延续了。

    【讨论】:

      【解决方案4】:

      我也想知道同样的问题。这是另一个来源:

      原点总是在左上角。这源于这样一个事实,即最初制造的电视类型是从左到右然后从上到下扫描的。所以它不像你在高中几何中看到的那样,原点并不总是在左下角......

      An Introduction to Interactive Programming in Python

      【讨论】:

        猜你喜欢
        • 2017-02-05
        • 2016-08-28
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 2022-07-09
        • 2014-06-22
        相关资源
        最近更新 更多