Простой ответ (без объяснения) можно найти здесь: Масштабирование 3D-моделей, поиск источника
Это потому, что преобразование масштабирования определяется просто как умножение координат на данный коэффициент(см., например, https://www.tutorialspoint.com/computer_graphics/3d_transformation.htm).. Это по сути означает, что это сделано по отношению к определенной контрольной точке. Ваш вызов transform.Scale () будет использовать источник (0,0,0) в качестве этой контрольной точки и, поскольку ваш объекточевидно не центрирован вокруг источника, вы получаете перевод (не вращение, как вы заявляете, кстати).
Чтобы получить локально-центрированное масштабирование, вам нужно выбрать опорную точку R на вашем объекте, вокруг которого вы хотите масштабировать(в вашем случае, поскольку вы хотите, чтобы масштабированный объект находился внутри оригинала, вам нужен какой-то центр - поскольку объект «почти выпуклый», центроид - среднее по всем точкам - может быть достаточно хорошим). Переведите объект с помощью-R, чтобы выровнять его с системой координат, масштабировать и затем перевести обратно на + R.
Попробуйте немного exerДля наглядности приведем простой пример: нарисуйте квадрат из точек с координатами (2,2), (2,3), (3,3), (3,2) и «масштабируйте его на 2» - выget (4,4), (4,6), (6,6), (6,4) - нарисуйте это тоже.Теперь попробуйте альтернативный вариант - сначала переведите по центру квадрата (2.5,2.5), вы получите (-0,5, -0,5), (-0,5,0,5), (0,5,0,5), (0,5, -0,5) (нарисуйте его)При масштабировании на два вы получаете (-1, -1), (-1, 1), (1,1), (1, -1) (ничья) и, наконец, переводите обратно на 2,5: (1,5, 1,5),(1.5,3.5), (3.5,3.5), (3.5, 1.5) и ничья - видите разницу?