为什么Java 2D原点位于左上角?

我不是在抱怨,只是想知道。 为什么Java使用绘图表面的左上角作为原点? 我认为更自然的是选择左下角作为原点并随着它们向上和向右增加轴(类似于Quartz)。

计算机图形学从一开始就出现在左上角,包括QuickDraw。 使用左下角(如数学)是一个PostScript / PDF的东西。 由于Quartz基于PDF,它使用其坐标,但这主要是图形库中的一个独特决定。

它总是像这样工作。

回到组装日,像素一直在左上角。 这是用户可以阅读的第一个像素或字符。

这种编号方式允许您拥有无限长的图像或文本。 如果你是从左下角开始并且想要添加一个新行,则必须移动所有内容并重新计算所有内容的坐标。

也可能是由于CRT显示器,电子枪从左到右,从上到下绘制图像。

如果你回到足够远的地方,比如1981年,你可以找到一些例外!
http://central.kaserver5.org/Kasoft/Typeset/BBC/Ch08.html

“想象一个图形窗口,其边缘a,b,c和d’图形单元远离屏幕的左下角(这始终是图形的起点)。”

可能来自电视标准,扫描从上到下开始。

我认为与最小化和最大化的帧兼容
明显的聚焦区域是用英语写出的页面中的第一个单词出现的地方,即左上角的巫婆是最自然的方式,除了它涉及第一象限中的某些数学的图形表示,而第一象限成为y轴的第二个数学积极的(反映或旋转180°关于原点(我来到谷歌搜索的方式来解决这个问题)实际上决定是在计算机和crt年龄之前做出很长时间的

使用右手坐标系,当X和Y位于左上角时,Z进入屏幕。 图形引擎现在可以知道远离屏幕的点……距离点越远Z越远……在渲染空间中的多个对象以及一些对象隐藏其他对象时非常有用……

像“它总是这样”这样的答案并没有真正回答“为什么”的问题,所以我很困惑为什么最高投票的答案是关于用额外信息重新陈述现状。

埃里克提到“在组装时代[后面],像素一直在左上角”,但他没有提到原因 。 他继续解释说,如果我们从左下角开始,并想在文本正文中添加一个新行,那么我们必须通过从底部向上覆盖屏幕上的所有内容(如果你开始)从前一个左下角开始,那么你没有为这个新行留出空间;必须向上移动东西以添加新行)。 用户Irreputable评论说这只对某些语言有意义(但我不知道从底层向上开始的任何语言,无论如何这都是真正重要的),并且它在图像或图像方面没有多大意义。显卡; 我同意,他对后者是正确的。

Ubieto可能给出了最有用的答案:它可能与CRT显示器的电子枪如何从上到下,从左到右绘制图像有关。

然而,所有这些答案可能都错过了一个重要的观点:人们问左上角是轴的起点这个问题的原因不仅仅是左上角的点,而且还因为与笛卡尔坐标系相反我们所有人都习惯了从小学到y轴向上增加的所有方式,这个计算机图形和Java坐标系统将y轴向下增加! 这是关于这个系统最令人不安和令人困惑的方面之一。 如果系统的原点位于屏幕的左上角但是y轴(并且有负数)向下,那么CRT监视器电子枪就能真正解释整个谜团,至少对我而言。 毕竟,我们会理解为什么(0,0)点在左上角,其他一切都像我们对数学教育的预期一样有效。

但是,Java和计算机图形2D坐标系不是这种情况; 令人惊讶的是,该系统的y轴向下增加。 为什么? 在我们考虑CRT或屏幕技术的起源之后,我认为这是最大的谜团。 为了回答这个问题,我只能想到一个可能性:计算机科学家希望2D图形坐标系更简单,并避免总是让x轴坐标为正y轴负的混淆。 如果我们假设由于电子枪的时间屏幕技术(避免屏幕撕裂该技术),左上角的起源是必要的,那么我们意识到计算机科学家可以选择:

  1. 像笛卡尔坐标系一样处理屏幕,就像笛卡尔坐标系一样,该象限中的每个像素(在屏幕上)具有正x轴坐标和负y轴坐标,如(5,-5) ; 要么

  2. 它们可以在y轴上翻转y轴(垂直向下),使第一象限向下,此后屏幕上的每个像素都将具有正x轴和正y轴坐标,如(5,5) )。 也许计算机科学家只是将其视为一种便利和一种可以最大限度地减少混淆的做事方式; 两个正数可能比正数和负数更容易混淆,更容易计算和可视化。

总之,这个问题有两个方面:(0,0)位于左上角而不是左下角的神秘感,以及y轴向下增加的神秘感。 第一个谜可能是最好的解释,早期的监控技术从上到下,从左到右。 第二个谜可能最好通过采用一个坐标系统来解释简单和清晰度,这个坐标系统有两个正数x和y坐标,而不是永久依赖于正x轴坐标的潜在混淆系统。负y轴坐标。

只是一个实现选择。 Windows和其他操作系统中的屏幕坐标以相同的方式给出,因此我猜他们选择了这一点以与操作系统的选择保持一致,这可能是遗留物。

它还具有与程序中的二维数组相似的优点,其中[0] [0]指的是左上角的元素。