Границы повернутого прямоугольника

Задача нахождения границ повернутого прямоугольника одинаково востребована, как в векторной, так и в растровой графике. При создании разного рода редакторов необходима область, описывающая фигуру, к которой применена трансформация. При обработке изображений, фото, для достижения каких-то художественных эффектов или решения сугубо технических проблем, например, для «выравнивания горизонта».

Подобные задачи можно разделить на три группы:

  1. Нахождение описывающего прямоугольника для повернутого прямоугольника.
  2. Нахождение ширины и высоты повернутого прямоугольника, вписанного в некий прямоугольник.
  3. Нахождение вписанного прямоугольника в повернутый прямоугольник.

Повернуть прямоугольник

Чтобы повернуть прямоугольник необходимо воспользоваться аффинным преобразованием поворота, или просто применить формулы преобразования ко всем четырем вершинам прямоугольника.

Формулы преобразования поворота доказываются тут.

Давайте создадим прямоугольник и зададим угол поворота. Можно менять угол поворота зажав и перетаскивая оранжевую вершину.



Get a better browser, bro…



Рис.1. Поворот прямоугольника. O(x,y) — координаты центра вращения. За оранжевую вершину можно тащить.

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

Latex formula
Latex formula

Если вращение происходит не вокруг центра координат, необходимо добавить координаты центра вращения, как на рисунке.1.

Немного кода:

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

Краткая формулировка задачи:

Есть некий прямоугольник (a b c d), с шириной w и высотой h. К нему применен поворот на α градусов. Необходимо найти ширину W и высоту H описывающего прямоугольника.


Get a better browser, bro…



Рис.2. Описывающий прямоугольник для повернутого прямоугольника. За оранжевую вершину можно тащить.

На рисунке синий цвет угла означает направление против часовой и положительный знак угла, красный — по часовой и отрицательный.

В качестве поворачиваемого прямоугольника может выступать, допустим, картинка. Чтобы получить на выходе «необрезанное» по краям изображение, необходимо посчитать размер будущей картинки, чтобы повернутое изображение полностью входило в область.

Рис.3. Обрезанные края при повороте картинки.

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

Это способ хороший, не особо затратный и универсальный. Если у нас число таких вершин непредсказуемо большое и отличается таким же непредсказуемым многообразием, это пожалуй, единственный способ. Но для прямоугольника есть способ лучше и проще.

Вспомним свойства прямоугольника.

— Прямоугольник является параллелограммом — его противоположные стороны попарно параллельны.

— Стороны прямоугольника являются его высотами. Середины сторон прямоугольника образуют ромб.

— Квадрат диагонали прямоугольника равен сумме квадратов двух его смежных сторон (по теореме Пифагора).

— Около любого прямоугольника можно описать окружность, причём диагональ прямоугольника равна диаметру описанной окружности (радиус равен полудиагонали).

Википедия

По теме прямоугольника можно заглянуть сюда (не реклама, просто симпатично, кратко, емко).

Сейчас нас интересует попарная параллельность сторон и то, что все углы прямоугольника — прямые. На основании этого и будет строится дальнейшее рассуждение. Предполагается, что про углы у параллельных прямых все в курсе.


Get a better browser, bro…



Рис.4. Расчет ширины W и высоты H описывающего прямоугольника. За оранжевую вершину можно тащить.

Рассмотрим рисунок 4.

  • Угол β — интересующая нас часть угла α, остаток от деления на π / 2.
  • Угол γ — это дополнение угла β до π / 2, т.е. γ = π / 2 — β.

Цвет в данном случае означает попадание β в один из квадрантов. Синий — квадранты 1 и 3, красный — 2 и 4.

Внимание! Следующий текст генерируется автоматически в зависимости от угла на рисунках.

Поставив галочку ниже, в рисунках 2 и 4 будет отображаться решение. Не стал сразу выводить, ну чтоб не нарушать интригу.

В качестве итога. Чтобы найти высоту и ширину описывающего прямоугольника для повернутого прямоугольника всегда работают эти красивые формулы:

Latex formula

Latex formula

Где:

  • W’ — ширина описывающего прямоугольника
  • H’ — высота описывающего прямоугольника
  • w — ширина исходного прямоугольника
  • h — высота исходного прямоугольника
  • α — угол поворота

Зная координаты центра трансформации, высоту и ширину границ, нетрудно рассчитать координаты описывающего прямоугольника.


Друзья, спасибо за внимание!

Подписывайтесь на телеграм-канал.

Жду ваших комментариев. Надо ли рассказывать, как вписать повернутый прямоугольник в заданный прямоугольник? Или может про «выравнивание горизонта»?


5 5 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x