Какой язык вы используете?
Если это C, а rect.size.height
и тому подобное - целые числа, то у вас есть серьезная проблема с округлением. Допустим, вы масштабируете точку 10, 10
от размера 20x20
до размера 30x30
. Ваши расчеты будут выглядеть так:
result.x = 10 * (30 / 20);
Это упрощает до:
result.x = 10 * (1);
Самый простой способ исправить это - избавиться от скобок:
result.x = point.x * destRect.size.width / srcRect.size.width;
result.y = point.y * destRect.size.height / srcRect.size.height;
Теперь ваш расчет 10 * 30 / 20
упрощается до 300 / 20
, а затем до 15
, что вам и нужно.
Обратите внимание, у вас все еще есть небольшая проблема с округлением, но если вы не можете получить субпиксельные местоположения, это примерно так близко, как вы собираетесь получить.