在晚上的大部分时间里,我一直坐在铅笔上,试图回想如何实现可以导航 2D 区域的可扩展视口。自从我第一次听说以来已经有一段时间了,但我想我已经想通了,我只需要验证一下。
我们有一个带有“经典”笛卡尔坐标系的二维世界,x 轴指向右侧,y 轴指向顶部。
在世界区域中,我们有一个由 2 个点 Pmin 和 Pmax 定义的矩形视口,其中: Pmin(xmin, ymin), Pmax(xmax, ymax)。这些点定义了视口的大小、位置和比例
在世界区域中,我们有一个点 P,其中 Pmin < P(x, y) < Pmax。(P 在视口矩形中)
为了显示整个该死的东西,我们有一个画布(例如),它有一个“改变的”坐标系,x 轴指向右,y 轴指向下。画布的大小是MaxX 和 MaxY。画布的大小是固定的。
现在,为了在画布中显示点P'(x', y'),我需要计算它的位置,如下所示:
x' = (x - xmin) * Sx
, 在哪里Sx = MaxX / (xmax - xmin)
y' = MaxY - (y - ymin) * Sy
, 在哪里Sy = MaxY / (ymax - ymin)
*请注意,由于画布的坐标系,y'坐标是倒置的
换句话说:上面的数学应该注意显示一个点,同时考虑到比例和视口的位置。我对么 ?如果不是,请证明我错了。