Как получить ограничивающий прямоугольник после поворота на его коннере от P1 до P1 '? - PullRequest
0 голосов
/ 11 апреля 2011

Пожалуйста, следуйте приведенному ниже изображению:

Illustration Image

Я хочу преобразовать прямоугольник с точкой привязки в центре его от точки P1 к точке P1.

Я хочу вычислить ограничивающий прямоугольник после поворота.

Я использую решение, чтобы получить новые 4 точки: P1 => P1 'и P2 => P2' и т. Д ... Но проблемы в том, что: прямоугольник (я ожидаюполучить) больше.Пожалуйста, скажите мне, как получить это правильно.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011
left = min (Pi'.X for 1<=i<=4)
bottom = min (Pi'.Y for 1<=i<=4)
right = max (Pi'.X for 1<=i<=4)
top = max (Pi'.Y for 1<=i<=4)
width = top - bottom
height = right - left
bounding_rectangle = [left, bottom, width, height]

Обновление:

Чтобы повернуть точку p вокруг center на angle радианы:

v.x = p.x - center.x
v.y = p.y - center.y
newp = center.x + cos(angle) * v.x - sin(angle) * v.y, center.y + sin(angle) * v.x + cos(angle) * v.y

Применяя это к каждому Pi, вы получаете Pi '

0 голосов
/ 11 апреля 2011
double halfDiagonal = sqrt((center.x - P1.x)*(center.x - P1.x) + (center.y - P1.y)*(center.y - P1.y));
double newAngle = rotationAngle + atan2(P1.y - center.y, P1.x - center.x);
newP1.x = center.x + halfDiagonal * cos(newangle);

Оставшиеся координаты и расчет мин / макс оставлены в качестве упражнения для читателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...