2015-08-12 3 views
2

Так что я понимаю, чтобы перевести:Переводя оси при изменении границ

x = x' + x0  or  x' = x - x0 
y = y' + y0  or  y' = y - y0 

где (х, у) старые координат относительно х системы (х «у») новые координаты относительно X'Y ', и (x0, y0) являются координатами относительно старой xy-системы.

Я ищу для перевода системы и изменения границ. Я хочу «увеличить масштаб» на определенном участке графика в фиксированном окне, что изменит начало и границы.

Для справки, я задал аналогичный вопрос here, но я думаю, что это было немного более запутанным.

ответ

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) будет в (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) 
+0

благодарит вас так много. Кажется, это именно то, что мне нужно. – mchoy25

+0

Не могли бы вы объяснить, как и почему эти преобразования работают? Или, может быть, ссылка на страницу, объясняющая это? – mchoy25

+0

Оба они представляют собой уравнения линий, проходящих через две точки, а две точки - это известные координаты двух углов как на экране, так и на графике. Поэтому мы знаем, что '(pll, qll)' предполагается преобразовать в '(xll, yll)' и '(pur, qur)' to '(xur, yur)'. Теперь любое другое значение, которое мы выбираем для 'x' или' y', имеет счетную часть в 'p' и' q', которая находится на линии, проходящей через эти две точки. –