Рамка после поворота кадра: пересчёт координат Python
После поворота кадра прямоугольную разметку нужно пересобрать вокруг преобразованных углов. Реализуйте поворот рамки по заданной формуле и верните координаты описанного прямоугольника; обрезка по кадру в этой задаче не выполняется.
Откройте программу платного курса Computer Vision Engineer, чтобы продолжить практику с данными, моделями и CV-сервисом.
Рамка после поворота
Задание
Кадр поворачивают вокруг его центра. Рамка разметки задана двумя углами и обязана остаться параллельной сторонам кадра, поэтому её пересобирают: поворачивают четыре угла исходной рамки и описывают вокруг них новый прямоугольник. Это и есть способ largest_box, принятый в библиотеках аугментации по умолчанию.
Реализуйте функцию rotate_box, которая по рамке, углу поворота и размеру кадра возвращает пересобранную рамку.
Точка кадра переходит при повороте по формулам, где (cx, cy) — центр кадра, а a — угол в радианах:
x2 = cx + (x - cx) * cos(a) - (y - cy) * sin(a)
y2 = cy + (x - cx) * sin(a) + (y - cy) * cos(a)
Рамка на входе и на выходе — кортеж (x_min, y_min, x_max, y_max) в пикселях. Обрезать результат по границам кадра не нужно: после поворота рамка может выйти за кадр, и это нормально.
Пример
rotate_box((0, 0, 100, 100), 45, 200, 200)
# (29.29, -41.42, 170.71, 100.0)
Квадратная рамка со стороной 100 после поворота на 45° превращается в рамку 141,42 на 141,42 — площадь выросла ровно вдвое.
Примечание
Угол приходит в градусах, положительное значение соответствует формулам выше. Размер кадра нужен только для того, чтобы найти его центр: cx = width / 2, cy = height / 2.
Координаты сверяются с точностью до сотых, поэтому округлять результат самостоятельно не нужно. Вызывать функцию вручную тоже не нужно — проверка запускает её сама.
Что проверяется
Код проверок скрыт, так что вот полный список того, что в них разбирается:
- формат ответа: четыре координаты
(x_min, y_min, x_max, y_max); - пример из условия — поворот на 45°;
- нулевой угол: рамка не меняется;
- поворот на 90°;
- поворот на 15° на неквадратном кадре, где центр смещён относительно рамки;
- отрицательный угол;
- рамка во весь кадр — после поворота она выходит за его границы;
- вырожденная рамка нулевой ширины.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
