我注意到我曾经使用过的每个计算机图形系统都使用左手坐标系,其原点位于左上角。Cairo、Java、Microsoft XYZ 和大多数图形程序都使用这个系统。我认为它们都可以追溯到一个共同的祖先,但我找不到任何关于此的参考资料。
如果我不得不猜测,我会说它来自 VGA 图形模式,使用与文本相同的坐标,这自然是基于自上而下、从左到右阅读英语的方式,“第二行”在下方“第一行”......但我正在弥补。
有没有人在讲述这个故事,或者可以指出正确的历史书的方向?
我注意到我曾经使用过的每个计算机图形系统都使用左手坐标系,其原点位于左上角。Cairo、Java、Microsoft XYZ 和大多数图形程序都使用这个系统。我认为它们都可以追溯到一个共同的祖先,但我找不到任何关于此的参考资料。
如果我不得不猜测,我会说它来自 VGA 图形模式,使用与文本相同的坐标,这自然是基于自上而下、从左到右阅读英语的方式,“第二行”在下方“第一行”......但我正在弥补。
有没有人在讲述这个故事,或者可以指出正确的历史书的方向?
这是一个古老的惯例,原因可能有点杜撰。以下是我发现的一些假设:
它源自 CRT 电子束扫描行为。
从上到下扫描意味着您不必等待整个帧首先发送,您只需在开始接收数据后立即开始扫描。(这又提出了一个问题,为什么要从上到下扫描)
它允许 Z 轴进入屏幕而不是从屏幕出来的右手坐标系。
令人讨厌的是,Cocoa 和 Quartz 使用左下角的原点。
不知道。我不认为有一个确定的答案。很可能当人们仍然拥有基于控制台的机器时,从左上角向下到右下角是有意义的。正如您所说,这就是世界上很多人的阅读方式。把原点放在那里是有道理的。
http://en.wikipedia.org/wiki/Memory-mapped_I/O
维基百科文章有一些关于内存映射显示的信息。例如,我们将一部分内存用于关闭和打开屏幕上的像素。我们让地址 0 成为屏幕的左上角部分,并根据像素是否在内存中,分块移动打开和关闭像素。这基本上就是第一篇文章所说的。
我不知道他们是否让地址 0 成为显示器的左上角,但这是有道理的,它可能刚刚延续。
我怀疑这是由于遗留原因而保留的旧约定。UpperLeft 的优势在于没有自下而上的语言书写系统。所以在 UpperLeft 更容易:
最后一个还扩展到动态放置和布局,其中图形对象的坐标与其父对象有偏移
我也想知道同样的问题。这是另一个来源:
原点总是在左上角。这源于这样一个事实,即在最初制造时,某种电视会从左到右然后从上到下扫描。所以它不像你在高中几何中看到的那样,原点并不总是在左下角......