Найти фактическую высоту и ширину элемента от повернутого элемента - PullRequest
0 голосов
/ 23 мая 2019

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

radians = (Math.PI / 180) * degree;
x = Math.abs(Math.sin(radians)) * h + Math.abs(Math.cos(radians)) * w;
y = w * Math.abs(Math.sin(radians))  +  h * Math.abs(Math.cos(radians));

, поэтому значения x, y являются новыми высотой и шириной после поворота.

Пример Прямоугольник поворачиваетсяв 15 градусов и высоту 74 и ширину 110 - это значения после поворота, я хотел бы узнать высоту (50) и ширину (100) прямоугольника из этих преобразованных значений, мне нужно выяснить это с помощью формулы, как указано выше,поэтому я могу заменить разными значениями. Образец изображения повернутого прямоугольника

1 Ответ

1 голос
/ 23 мая 2019

Позвольте обозначить

s = Math.abs(Math.sin(radians))

и аналогичные для c=cosine.Тогда у вас есть система уравнений

x = s * h + c * w
y = c * h + s * w

Умножьте первое на c, второе на s

c * x = c * s * h + c * c * w
s * y = s * c * h + s * s * w

и вычтите уравнения, чтобы получить w

w * (c * c - s * s) = c * x - s * y
w = (c * x - s * y) / (c * c - s * s)

Делать аналогичнопроцедура для h (или выражение h с заменой w в первом уравнении)

Обратите внимание, что 45/135/225/315 градусов дают вырожденный случай : знаменатель равен нулю, невозможнополучить истинный результат - это фундаментальное ограничение, мы можем вписать бесконечное количество прямоугольников с углом 45 в квадрат (x = y здесь)

w = ((c * rot_w) - (s * rot_h)) / (c * c - s * s);
h = ((c * rot_h) - (s * rot_w)) / (c * c - s * s);
...