У меня, похоже, здесь что-то вроде математического сбоя ... Мне нужно преобразовать точку (x, y) из одного координатного пространства в другое - не в смысле полярности в декартову или что-то в этом роде. .. просто от одного, связанного с другим. т.е. для определенного (x, y), который попадает в прямоугольник с нижним левым (-100, -100) и верхним правым (100,100), мне нужно выяснить, где эта точка будет в прямоугольнике с нижним левым (0 , 0) и верхний правый (500, 500).
Я чувствую, что это просто математика, но у меня чертовски много времени, чтобы все сделать правильно ...
Это для маленькой компьютерной программы, написанной на Java. По существу, есть окно клипа, которое изменяется, и это окно клипа должно заполнять все окно просмотра. Начальные значения для клипа и вида задаются вышеуказанными прямоугольниками в указанном порядке. Однако клип может измениться, например, на прямоугольник с нижним левым (-80, -65) и верхним правым (75, 65). Затем мне нужно будет преобразовать точку, которая попадает в этот прямоугольник, в точку, которая попадает в окно просмотра (нижний левый (0,0), верхний правый (500, 500))
Вот что у меня есть для этого прямо сейчас:
public int normalizeX(float x) {
float clipWidth = clipRight - clipLeft;
int viewWidth = viewRight - viewLeft;
x += 100; //Get x into range [0, 200] instead of [-100, 100]
//First convert x to value within clip width, then "scale" to viewport width
return (int)(((clipWidth*x)/200) * (viewWidth/clipWidth));
}
public int normalizeY(float y) {
float clipHeight = clipTop - clipBottom;
int viewHeight = viewTop - viewBottom;
y += 100; //Get y into range [0, 200] instead of [-100, 100]
//First convert y to value within clip height, then "scale" to viewport height
return (int)(((clipHeight*y)/200) * (viewHeight/clipHeight));
}
Спасибо за любую помощь!