Позвольте обозначить
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);