Изменение размера прямоугольника из разных источников

StackOverflow https://stackoverflow.com/questions/1945100

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня действительно есть прямоугольник, в котором содержалась информация о topx, topy, ширине и высоте.

Я хочу масштабировать этот прямоугольник на основе источника, отличного от верхнего левого.Существует ли уже существующий алгоритм для этого ?

В настоящее время я работаю над Eclipse GEF & SWT.В GEF предполагается, что все операции с прямоугольниками выполняются в левом верхнем углу, где начинается чертеж, и они масштабируются / изменяют размер с левого верхнего угла.Но я хочу сделать масштабирование / изменение размера от центра.

например :в моем прямоугольнике есть информация типа {100,100,50,50}.Если я сделаю масштабирование 1,5 как по x, так и по y слева вверху, я получу результирующий прямоугольник в виде {100,100,100,100} ( первые два - x, y, остальные - ширина, высота).

Спасибо J

Это было полезно?

Решение

Мое определение масштаба отличается от вашего, потому что, если я уменьшу масштаб на 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}

Другие советы

если прямоугольник определяется

topx, topy, widht, height

коэффициент масштабирования равен

factor

исходными координатами являются

ox, oy

вы можете масштабировать прямоугольник по заданной начальной точке с помощью следующей формулы

topx   = ox + ( topx - ox ) * factor;
topy   = oy + ( topy - oy ) * factor;
width  = width  * factor;
height = height * factor;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top