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

时间:2011-03-15 02:42:00

标签: java graphics

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

10 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

它一直都是这样的。

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我认为与最小化和最大化的框架兼容 明显的聚焦区域是以英文书写的页面中的第一个单词出现的位置,即左上方的女巫是最自然的方式,除非它涉及第一象限中的某些数学的图形表示,而第一象限成为y轴的第二个数学正面(围绕原点反射或旋转180°(我在谷歌搜索时解决了这个问题) 实际上,这个决定是在计算机和crt年龄之前做出很长时间的。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

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

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

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

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

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

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

答案 8 :(得分:-2)

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

答案 9 :(得分:-2)

它的好处是类似于程序中的二维数组,其中[0] [0]指的是左上角的元素。

相关问题