在改变边界时平移轴

时间:2015-08-12 18:35:44

标签: c++ allegro5 cartesian-coordinates

所以我理解翻译:

stripe_customer_ids

其中(x,y)是相对于xy系统的旧坐标,(x',y')是相对于x'y'系统的新坐标,(x0,y0)是相对于旧xy系统的坐标。 / p>

我正在寻找翻译系统,同时也改变界限。我想在固定窗口内“放大”图形的特定部分,这将改变原点和边界。

作为参考,我问了一个类似的问题here,但我认为这有点令人困惑。

1 个答案:

答案 0 :(得分:0)

希望这能回答你的问题:

假设您正在绘制的窗口(以像素坐标为单位),左下角为(p_ll, q_ll),右上角为(p_ur, q_ur)

但是,在笛卡尔坐标系中,相同的位置为(x_ll, y_ll)(x_ur, y_ur)。然后这些是你需要的转换:

p(x) = p_ll + (p_ur - p_ll) * (x - x_ll) / (x_ur - x_ll)
q(y) = q_ll + (q_ur - q_ll) * (y - y_ll) / (y_ur - y_ll)

因此,例如,如果窗口为x from 0 to 600 and y from 0 to 600,并且绘图边界为x from -2 to 2 and y from -1 to 1,那么坐标为(0.0, 0.0)的点将位于{{ 1}}或

(p(0), q(0))

任何其他观点都一样。您可以尝试使用等式,您应该找到p(0.0) = 0 + (600 - 0) * (0 -(-2)) / (2 - (-2)) = 300 q(0.0) = 600 + (0 - 600) * (0 - (-1)) / (1 - (-1)) = 300 p(-2) = 0p(2) = 600q(-1) = 600

请注意,我在这里假设像素y坐标指向下方(几乎所有监视器坐标都是这样),而笛卡尔坐标y指向上方。

如果你想从屏幕坐标转到绘图坐标(例如,如果你想将鼠标点击的位置转换为它的笛卡尔计数器部分),那么使用这些逆变换:

q(1) = 0