为什么从左上角开始测量图形坐标?

时间:2012-10-23 19:54:59

标签: canvas graphics coordinates history

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

如果我不得不猜测我会说它来自VGA图形模式,使用与文本相同的坐标,这自然是基于如何自上而下,左右读取英文语言,使用“第二行” “低于”第一线“......但我正在努力。

周围是否有人讲述这个故事,或者能指出我正确的历史书的方向?

4 个答案:

答案 0 :(得分:4)

这是一个古老的惯例,其原因可能有点过时。以下是我发现的一些假设:

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

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

它允许带有Z轴的右手坐标系进入屏幕,而不是从屏幕中出来。

令人讨厌的是,Cocoa和Quartz使用了左下角。

答案 1 :(得分:1)

不知道。我认为没有明确的答案。很可能当人们仍然使用基于控制台的机器时,从左上角到右下角是有意义的。正如你所说的那样,世界上很多人都在阅读。把原点放在那里是有道理的。

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

维基百科文章提供了有关内存映射显示的一些信息。比方说,我们将一部分内存用于关闭屏幕上的像素。我们让地址0成为屏幕的左上角部分,然后根据它们是否在内存中以块的形式打开和关闭像素。这基本上就是第一篇文章的内容。

我不知道他们是否让地址0成为显示器的左上角,但它是有意义的,它可能刚刚结束。

答案 2 :(得分:1)

我怀疑这是一个由于遗留原因而保留的旧约定。 UpperLeft具有优势,即没有语言编写系统从下到上。所以在UpperLeft中更容易:

  • 放置多行文字
  • 使用未知或无限高度的页面
  • 如果更改了页面高度(即更大或更小的设备),则在BottomLeft中您必须翻译每个对象坐标,而在UpperLeft中则不必翻译。

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

答案 3 :(得分:0)

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

  

原点始终位于左上方。这是因为这样的事实:电视刚建成时,会从左到右然后从上到下扫描。因此,这与您在高中几何中看到的原点并不总是在左下角的方式是不一样的。

An Introduction to Interactive Programming in Python