我发现 (0,0) 映射到屏幕的左上角有点不直观。在 Java Swing 中使用左手坐标系是否有历史原因?
虽然将其映射到右手系统并不太困难,但我很想知道拥有左手系统是否有任何隐藏的好处。
根据 Raymond Chen 的“为什么原点在左上角?”,这只是因为电视机一直都是这样(顺便说一句,这一点没有改变)。所以看来这个早期的设计决策今天仍然有影响。
早期的家用电脑经常连接到电视,所以很自然地使用了这个坐标系。我猜想很多显示器都以同样的方式工作,只是因为制造商可以部分回收电子/逻辑。由于这是当时程序员使用的“自然”坐标系(请记住,当时我们必须在较低的级别访问视频系统),因此它只是卡住了,因为大多数人都习惯了它。
此模型的例外是 PostScript 及其后继者 PDF。他们对纸张进行建模,因此不必为了提高效率而使用屏幕坐标系。他们在左下角使用 (0,0),就像数学家通常所做的那样。 NeXT 使用称为 Display PostScript 的视频系统,该系统是 PostScript 的扩展,用于在屏幕上绘图,因此使用左下角为 (0,0) 的 PostScripts 系统。今天的 Mac OS X 源自 NeXT,因此也使用这个系统。在 iOS 上,Apple 工程师决定将系统翻转为左上角为 (0,0) 的更常见模型,以便开发人员更容易从其他系统迁移。
我不知道这有什么历史原因,但我认为它确实有道理。或者更确切地说,考虑到我们所处的文化是从左到右、从上到下阅读,这是有道理的。
例如,看一下网页 - 它向右和向下延伸,因此您永远无法真正知道左下角(例如)在哪里。另一方面,如果你以左上角为原点,当你打开页面时它总是在同一个位置,你永远不必处理负数。
因此,我的理论是,原点位于左上角的位置是我们阅读方式的产物。
历史上,电视图片和传真机是从左到右、从上到下扫描的。这可能是因为大多数书面语言都是这样写的,所以如果你要选择扫描方向,人们会选择相同的方式扫描也就不足为奇了。
大多数书面语言都是从左到右书写的,因为大多数人都是惯用右手的,因此不太可能弄脏已经写下的内容。
它是任意的;例如,GL 将 (0, 0) 放在左下角。在 Java 中,相关的转换是
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
....
AffineTransform at = g2d.getTransform();
g2d.scale(1, -1);
...
g2d.setTransform(at);
}
在做了一些研究之后,我除了指出在以前的计算机系统中,0,0 总是左上角的陈述之外什么也找不到,因为这是人们开始书写的地方。
并且,随着文本继续流动,它会到达底部,增加行号。
某些系统有一个类似于笛卡尔平面的约定:0,0 位于左侧、底部。一般来说,绘图程序会这样做,因为通常您会从该位置绘图。