我发现 (0,0) 映射到屏幕的左上角有点不直观。在 Java Swing 中使用左手坐标系是否有历史原因?
虽然将其映射到右手系统并不太难,但我很想知道拥有左手系统是否有任何隐藏的好处。
我发现 (0,0) 映射到屏幕的左上角有点不直观。在 Java Swing 中使用左手坐标系是否有历史原因?
虽然将其映射到右手系统并不太难,但我很想知道拥有左手系统是否有任何隐藏的好处。
根据这篇文章,这仅仅是因为电视机一直都是这样(顺便说一句,它没有改变)。因此,这个早期的设计决定似乎在今天仍然具有影响力。
早期的家用电脑往往是连接电视的,所以自然而然地使用了这个坐标系。我想很多显示器的工作方式都是一样的,因为制造商可以部分回收电子/逻辑。由于这是当时程序员使用的“自然”坐标系(请记住,当时我们必须在低得多的级别上访问视频系统)它就像大多数人习惯的那样卡住了。
此模型的例外是 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 在左边,底部。通常,绘图程序会这样做,因为您通常会从那个位置绘图。