【问题标题】:How to convert from one co-ordinate system to another (graphics)如何从一种坐标系转换为另一种坐标系(图形)
【发布时间】:2011-06-22 23:45:06
【问题描述】:

这个问题我已经有一段时间了。我觉得我应该知道这一点,但我这辈子都不记得了。

如何将屏幕像素映射到它们各自的“图形”x,y 位置?坐标系已配置为从左下角 (0,0) 开始,并逐渐增加到右上角。

我希望能够缩放,所以我知道我需要将缩放距离配置到答案中。

Screen
|\          Some Quad
| \--------|\Qx
|  \    Z  | \
|   \       \|Qy
 \  |
Sx\ |Sy
   \|

我想知道我屏幕上的哪些像素会出现四边形。显然随着 Z 的减小,quad 会占据更多的屏幕,而随着 Z 的增加,它会占据更少的屏幕,但是这些具体是如何计算的呢?

为了进一步说明,我想知道如何使用等式中的缩放因子将这些屏幕像素映射到“图形”坐标上。

感谢您的帮助。

【问题讨论】:

  • +1 表示非常令人印象深刻的 ASCII 轴 - 我做了两次,果然它们就是我认为的那样!

标签: graphics coordinate-systems perspective


【解决方案1】:

使用缩放系数作为坐标和/或屏幕尺寸的乘数。

例如,如果您有一个 100x150 像素的正方形,当放大到 150% 时,矩形的大小应该是 150x225。

一个等式是:

h = 高度

w = 宽度

z = 缩放百分比 (100% = 1.00)


新宽度 = W = wz

新高度 = H = hz

要映射屏幕像素,请应用更基本的数学原理。相对坐标完全取决于缩放的中心。如果一切都在精确的中心放大,这很容易。如果从其他地方缩放(例如,从角落或非中心坐标拉伸对象),则必须对方程应用偏移量。

从中心点缩放一个矩形很容易。将矩形宽度的差除以2,然后加到左右坐标值上(可以加负数)。对身高做同样的事情。

如果从不在其确切中心但仍在矩形边界内的坐标缩放矩形,则需要偏移。只需确定应将多少百分比的高度和宽度变化应用于矩形的每一侧。靠近缩放点的边将获得较低百分比的变化。

当缩放点位于矩形之外时,还必须考虑到缩放点的距离。除了缩放矩形之外,此偏移量还会移动整个矩形。

拿一张大纸,画一些可视化图。这总是有帮助的。 =)

【讨论】:

  • 我想我知道我为什么这么挣扎了;问题是我根本不知道任何映射。我知道放大会使坐标成倍增加,我可以在同一个坐标集中放大。问题更多与从我的整个屏幕像素(已应用于滚动的偏移量)映射到四边形有关。
  • 看来如果无法确定坐标,也无法确定矩形的尺寸。无论 Z 值是多少,如果不了解有关大小和位置的一些信息,您都无法计算出结果。我想您总是可以从原点 (0,0) 缩放,这意味着您只需要担心高度和宽度值。但是,如果您需要,无法确定任何最大尺寸限制。
  • 我确实知道两组网格的坐标,但这是如何映射的导致问题。也许我可以改写: (0,0)(2,0)(2,2)(0,2) 的图形坐标形成一个正方形。然后我将视口设置为 Z=-8,这显示屏幕中间的正方形相对较小。如果然后我得到正方形顶部中间的屏幕坐标,可能会说 265,220(宽屏显示)我如何将这些屏幕坐标映射回我正方形的顶部中间(在这种情况下( 1,2))?
  • 发现我需要使用屏幕的纵横比(Z=0 时的图形坐标)加上缩放,然后分别除以屏幕高度和宽度.这给出了每 1 个像素的“图形”坐标数量。然后可以将其乘以到正确位置的绝对像素坐标。
  • 你去!碎片落到位只需要时间。 ;)
【解决方案2】:

如果(xk, yk)是缩放前的中心,大小是(Sx, Sy),在(0, 1]中缩放到Z的一个因子,新的大小就是(Qx, Qy) = (Sx *(1-Z), Sy*(1-Z)) 以 (xk, yk) 为中心,表示屏幕坐标为:

rectangle: xk - Qx/2, yk - Qy/2, xk + Qx/2, yk + Qy/2

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多