【问题标题】:Why does software often use an inverse coordinate system compared to regular math coord system?与常规数学坐标系相比,为什么软件经常使用逆坐标系?
【发布时间】:2015-10-08 11:08:14
【问题描述】:

您可能知道,在 c# 中,平面的原点 (0,0) 是左上角。向右和/或向下被视为+,而向左和/或向上被视为-。与此相反的是常规数学坐标系统:

(0,0)=平面中间,上/右 = +,下/左 = -。

这有点违反直觉,有时可能很烦人,因为我们(多年来)习惯于使用常规的数学坐标,而且您还必须重新计算坐标。

这是一个基本的设计缺陷吗?一段时间后你会习惯吗?还有哪些其他语言使用不同的坐标系统,如 c#?

【问题讨论】:

  • 所有计算机图形坐标系的左上角都是(0, 0),除非有一些我不知道的奇怪系统
  • 在 OpenGL 中,原点在左下角
  • @samgak:你确定它不在中间吗?
  • @samgak 这是(和轴)我所说的那样:}空间转换万岁。
  • @user2864740:您可以定义从自定义坐标系到 OpenGL 坐标的映射(使用视图矩阵),但 OpenGL 坐标不会改变。

标签: math coordinate-systems coords


【解决方案1】:

不是 C#,而是使用逆坐标系的显示器,这来自于使用 CRT 绘制显示器并且图像从上到下、从左到右绘制的日子。这就是坐标系操作系统使用匹配的原因。

像 C# 这样的语言只是封装了底层操作系统的 API,这也是 C# 使用它的原因。

【讨论】:

  • 几乎一字不差地给出了相同的答案,但你打败了我 :)
  • CRT 也可以轻松地从下到上扫描——从上到下编号系统的起源是一页文本上的行号。
  • @BenVoigt 也许,也许不是。我的印象是因为 VGA 将其数据流定义为自上而下。
  • 我认为它可以追溯到比 CRT 还要早的行式打印机,基本上是自动打字机。他们按页面阅读顺序打印,从左到右然后从上到下。 CRT 继承了它们的坐标系,许多应用程序也继承了它们的坐标系。
  • 早期显示输出(CGA、VGA 等)实际上只是一些预先指定的内存区域的“位图”。当以简单的二维数组查看这些区域(以及在被曝光之后)时,左上角的原点和升序的 x/y 对像素/单元格索引有意义。
【解决方案2】:

数学图形平面是一个虚拟的东西,它向四面八方无限扩展。

屏幕是真实的东西,根本无法真正展开。

相反,我们使用滚动的概念,并且我们习惯从起点向下滚动。

因此,从概念上讲,图形系统都使用与(从左到右和从上到下)文本块或书籍中的页面相同的系统。这是关于我们如何滚动以扩大/推进显示区域。

但它可以以任何其他方式定义;毕竟例如与负行号相反,负坐标确实有意义..

【讨论】:

    【解决方案3】:

    如果您不喜欢屏幕上的坐标系,您可以创建包装器方法以任何您喜欢的方式重新映射坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多