改变边界时平移轴
Translating axes while changing bounds
所以我理解翻译:
x = x' + x0 or x' = x - x0
y = y' + y0 or y' = y - y0
其中(x,y)是相对于xy系的旧坐标,(x',y')是相对于x'y'系的新坐标,(x0,y0)是相对于旧xy系的坐标.
我正在寻找翻译系统的同时也改变界限。我想 "zoom in" 在固定 window 内的图形的特定部分,这将改变原点和边界。
作为参考,我问了一个类似的问题here,但我认为它有点令人困惑。
希望这能回答您的问题:
让我们假设您正在绘制的 window(在像素坐标中)左下角是 (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)
因此,例如,如果 window 为 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)
的点为将在 (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) = 0
、p(2) = 600
、q(-1) = 600
和 q(1) = 0
.
请注意,我在这里假设像素 y 坐标指向下方(几乎所有监视器坐标都是如此),而笛卡尔坐标 y 指向上方。
如果你想从屏幕坐标转到绘图坐标(例如,如果你想将鼠标点击的位置转换为其对应的笛卡尔坐标),请使用这些逆变换:
x(p) = x_ll + (x_ur - x_ll) * (p - p_ll) / (p_ur - p_ll)
y(q) = y_ll + (y_ur - y_ll) * (q - q_ll) / (q_ur - q_ll)
所以我理解翻译:
x = x' + x0 or x' = x - x0
y = y' + y0 or y' = y - y0
其中(x,y)是相对于xy系的旧坐标,(x',y')是相对于x'y'系的新坐标,(x0,y0)是相对于旧xy系的坐标.
我正在寻找翻译系统的同时也改变界限。我想 "zoom in" 在固定 window 内的图形的特定部分,这将改变原点和边界。
作为参考,我问了一个类似的问题here,但我认为它有点令人困惑。
希望这能回答您的问题:
让我们假设您正在绘制的 window(在像素坐标中)左下角是 (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)
因此,例如,如果 window 为 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)
的点为将在 (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) = 0
、p(2) = 600
、q(-1) = 600
和 q(1) = 0
.
请注意,我在这里假设像素 y 坐标指向下方(几乎所有监视器坐标都是如此),而笛卡尔坐标 y 指向上方。
如果你想从屏幕坐标转到绘图坐标(例如,如果你想将鼠标点击的位置转换为其对应的笛卡尔坐标),请使用这些逆变换:
x(p) = x_ll + (x_ur - x_ll) * (p - p_ll) / (p_ur - p_ll)
y(q) = y_ll + (y_ur - y_ll) * (q - q_ll) / (q_ur - q_ll)