Масштабирование происходит относительно выбранной точки, центра. Из центра проводятся векторы в каждую из вершин многоугольника. Длина каждого вектора умножается на k. При умножении на 0, многоугольник коллапсирует в эту точку. Или при плавном увеличении k, многоугольник «растет» из этого центра. И располагаться этот центр может где угодно – точка произвольная.
Вам нужно только решить, где центр.
Если расположить центр в
(0, 0)
задача упрощается, т.к. координаты вершин совпадают с векторами в них из центра.
На JS могла бы быть примерно такая функция, принимающая на вход коэффициент k, массив координат центра и массив массивов координат точек:
function scale( k, center, points) {
return points.map( p => p.map( (x, i) => center[i] + k * (x - center[i])));
}
scale(
2, // в два раза
[3, 1], // относительно точки (3,1)
[ [0,0], [1,1], [3,1], [10,10] ] // этот четырёхугольник
)
// [ [-3, -1], [-1, 1], [3, 1], [17, 19] ]
В любом N-мерном пространстве годится. Сделал живой пример, можно поиграть: клик по полю назначает центр масштабирования