Наименьшая возможная ограничительная рамка для повернутого изображения - PullRequest
1 голос
/ 31 декабря 2010

Предположим, у меня есть произвольное входное изображение с шириной w1 и высотой h1 . Я хочу повернуть это изображение на 360 градусов обратно в исходное положение. Однако если изображение состоит из чего-либо, кроме круга, то края изображения будут обрезаны, если холст, на котором оно нарисовано, останется размером w1 на h1 .

Figure

Тогда мне нужно определить размер холста (ширина w2 и высота h2 ), который можно использовать для всех повернутых версий входного изображения. Я знаю, что w2 == h2 , и, следовательно, желаемый размер холста является квадратом, потому что очевидно, что мы вращаем что-то относительно центральной точки и конечного изображения (после 360 оборотов) по сути это круг.

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

Одно из решений, которое я придумала, - создать холст большего размера, чем мне нужно (например, установив w2 и h2 на max(w1, h1) * 2, вращая все, а затем обрезая все прозрачные пиксели. Это не очень эффективно, и я бы предпочел рассчитать самый жесткий ограничивающий прямоугольник заранее.

Ответы [ 3 ]

3 голосов
/ 31 декабря 2010

Это вопрос геометрии. По сути, вы хотите найти диаметр (d) круга, который бы вписал ваш оригинальный холст, а затем w2 = h2 = d

Диаметр такого круга будет √(w1^2+h1^2)

Итак w2 = h2 = √(w1^2+h1^2)

Кроме того, чтобы избежать отсечения, вы можете взять предел этого результата, а не округлять.

2 голосов
/ 31 декабря 2010

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

w = h = sqrt (h ^ 2 + w ^ 2)

(я не знаю ActionScript)

Однако, если изображение у вас не в квадрате, вам, по сути, придется найти точку, самую дальнюю от центра ...

PS: уже поздно, и я болтаю, так что извините, если это не так.

1 голос
/ 31 декабря 2010

Ваш холст должен быть квадратным.

Если вы собираетесь вращать тело, похожее на зеленую фигуру, вокруг любой точки (в этом примере - точки А), то сторона квадрата равна двойной величине расстояния до самой отдаленной точки до А в теле..

alt text

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