Мое определение масштаба отличается от вашего, потому что, если я масштабирую на 1,5 от левого верхнего угла, мой результирующий прямоугольник будет {100, 100, 75, 75} -> источник останется прежним, а размер каждой стороны умножится по шкале.
Используя эти определения, если (x, y) - верхние левые координаты прямоугольника, масштабирующиеся от центра и сохраняющие исходную константу:
{x, y, ширина, высота} -> {x + ширина * (1 - масштаб) / 2, y + высота * (1 - масштаб) / 2, ширина * масштаб, высота * масштаб}
Я предлагаю шкалу> 0, хотя результат определяется для нулевых и отрицательных значений.
Пример работы: масштаб {100, 100, 50, 50} на 1,5 от центра.
x: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
y: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
width: 50 -> 50 * 1.5 = 75
height: 50 -> 50 * 1.5 = 75
Результат: {100, 100, 50, 50} -> {87,5, 87,5, 75, 75}