Я пишу, что приложение рисует в окне другого приложения (это под OS X с Какао, но вопрос достаточно общий, и я надеюсь, что его не увязнут проблемы операционной системы / фреймворка), и я ' Я столкнулся с проблемой, которая, кажется, должна иметь простой ответ, но это сводит меня с ума. Вот проблема:
Я рисую прямоугольник внутри окна другого приложения, которое должно находиться в определенном месте относительно верхней и левой частей окна (то есть поля между моим прямоугольником и верхней и левой частью целевого окна должны оставаться фиксированными). Я могу рассчитать относительные координаты x, y в процентах от размера окна, что прекрасно работает: прямоугольник отображается правильно. Однако пользователь затем изменяет размеры окна, и я могу правильно изменить размер прямоугольника, используя преобразование, основанное на отношении новой высоты и ширины к старой высоте и ширине, но я теряю свое относительное расположение: координаты прямоугольника теперь неверны (см. изображение - это грубый макет проблемы).
изображение http://img30.imageshack.us/img30/5273/resizeexample.png
Теперь я не могу понять, как вычислить новые координаты x, y относительно верхней и левой частей окна. Окно не квадратное; его изменение размера ограничено другим приложением, но соотношение сторон ширина / высота изменяется какой-то неизвестной функцией. Когда я измеряю требуемые координаты y в относительных единицах, процент изменяется при изменении размера окна. Численно это выглядит примерно так:
До изменения размера:
размер окна: h => 760, w => 546
начало прямоугольника: x => 355, y => 84 (например, 84/546 = 15,3% высоты)
После изменения размера:
размер окна: h => 1009, w => 717
Происхождение прямоугольника должно быть: (Я могу измерить его как что-то вроде x => 474, y => 99, но я не могу предсказать эти значения; 99/717 сейчас = 13,8% высоты).
Я испробовал все соотношения измерений двух окон, которые только могу себе представить; Я также натолкнулся на идею перевода в начало координат, масштабирования, а затем перевода обратно, чтобы избежать проблемы масштабирования перемещения координат - но я не знаю, куда переводить обратно! Это, вероятно, имеет какое-то простое геометрическое / тригонометрическое решение, но со мной ничего не происходит, независимо от того, сколько диаграмм я рисую. Я готов согласиться с неизбежным смущением того, что кто-то указывает на какое-то однострочное решение этой проблемы, если они могут просто указать мне правильное направление здесь!