Canvas 为什么图形坐标是从左上角测量的?

Canvas 为什么图形坐标是从左上角测量的?,canvas,graphics,coordinates,history,Canvas,Graphics,Coordinates,History,我注意到我使用过的每个计算机图形系统都使用左手坐标系,其原点位于左上角。Cairo、Java、microsoftxyz和大多数图形程序都使用这个系统。我想它们都可以追溯到一个共同的祖先,但我找不到任何关于这方面的参考资料 如果让我猜的话,我会说它来自VGA图形模式,使用与文本相同的坐标,这自然是基于英语是如何从上到下、从左到右阅读的,“第二行”在“第一行”下面。。。但这是我编造的 有人在附近讲述这个故事吗,或者可以为我指出正确的历史书的方向吗?这是一个古老的习俗,原因可能有点不真实。以下是我发现

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

如果让我猜的话,我会说它来自VGA图形模式,使用与文本相同的坐标,这自然是基于英语是如何从上到下、从左到右阅读的,“第二行”在“第一行”下面。。。但这是我编造的


有人在附近讲述这个故事吗,或者可以为我指出正确的历史书的方向吗?

这是一个古老的习俗,原因可能有点不真实。以下是我发现的一些假设:

这是从CRT电子束扫描行为推导出来的

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

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


令人烦恼的是,可可和石英使用左下角的原点。

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

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


我不知道他们是否让地址0作为显示器的左上角,但这是有道理的,而且它可能只是延续了下来。

我怀疑这是一个因遗留原因而保留的旧惯例。 UpperLeft有一个优势,即没有自下而上的语言书写系统。所以在左上角更容易:

  • 放置多行文字的步骤
  • 使用未知或无限高的页面
  • 如果页面高度发生变化(即设备变大或变小),则在左下角必须平移每个对象坐标,而在左上角则不必平移

最后一个问题也扩展到动态布局和布局,其中图形对象的坐标是相对于其父对象的偏移量

我也在想同样的问题。以下是另一个来源:

原点始终位于左上角。这来自于这样一个事实,电视刚建成时,从左到右扫描,然后从上到下扫描。这和你在高中几何中看到的不一样,原点并不总是在左下角


有趣的是,我没有想到模拟电视的背景。二维坐标的约定是要有Z,但这确实对“修复它”有用。通常在纸上发展数学,然后在编程完成后让它翻转,这总是很有趣的。CRT的标准化是从上到下,从左到右绘制,所以视频硬件按照与绘制相同的顺序对屏幕缓冲区布局进行标准化。Gah的副本,我猜当我搜索时,答案没有显示出来,因为它被标记为Java特定的。