#алгоритм #изображения
Вначале было красное изображение, дабы его повернуть без потерь создается временное желтое, но оно избыточно. Требуется обрезать временное желтое, до зеленого. Подразумевается что исходное изображение может быть произвольного размера. Угол поворота так же произволен.
Ответы
Ответ 1
Если нарисовать повернутый прямоугольник и его ограничивающий прямоугольник, и пометить углы, равные углу поворота Fi, то видно, например, что CD = DH + HC = EH * Cos(Fi) + GH * Sin(Fi) и формулы для размера будут такие: New_Height = Old_Width * Abs(Sin(Fi)) + Old_Height * Abs(Cos(Fi)) New_Width = Old_Width * Abs(Cos(Fi)) + Old_Height * Abs(Sin(Fi))Ответ 2
Так как вы не указываете никаких деталей, то и ответ будет общим: Вычисляете точку центра картинки O Вычисляете точку угла картинки C Поворачиваете картинку вокруг центра на некий известный вам угол A Поворачиваете точку угла картинки на тот же угол x = O.x + (C.x - O.x) * Cos(A) + (C.y - O.y) * Sin(A); y = O.y - (C.x - O.x) * Sin(A) + (C.y - O.y) * Cos(A); Вот вам и координаты x и y точки повернутого угла Повторив 4 раза для всех углов, получаете мин-макс значения ограничивающего прямоугольника P.S. Если у вас квадрат и точка вращения в центре, то достаточно координат 1 угла. 4 угла - это общее решение, удобное именно для прямоугольников не точно лежащих в центре.Ответ 3
Если надо удалить все прозрачные края, то просто для каждого из них порверяем, сколько прозрачного мы можем срезать. Получатся 4 координаты, по которым надо вырезать прямоугольник (включительно). var l, t, r, b; for (l=0; l=l; --r) for (var q=0; q =t; --b) for (var q=0; q
Комментариев нет:
Отправить комментарий