Надеюсь, это ответит на ваш вопрос:
Предположим, что окно, в котором вы рисуете (в координатах пикселя), таково, что нижний левый угол равен (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)
будет находиться в (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)
person
triple_r
schedule
12.08.2015