Решение
При заданных размерах ограничивающего прямоугольника bx
на by
и t
- это вращение против часовой стрелки прямоугольника размером x
на y
:
x = (1/(cos(t)^2-sin(t)^2)) * ( bx * cos(t) - by * sin(t))
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t))
Деривация
Почему это так?
Сначала рассмотрим, что длина bx
разрезана на две части, a
и b
, наугол прямоугольника.Используйте тригонометрию для выражения bx
в терминах x
, y
и theta
:
bx = b + a
bx = x * cos(t) + y * sin(t) [1]
и аналогично для by
:
by = c + d
by = x * sin(t) + y * cos(t) [2]
1 и 2 могут быть выражены в матричной форме как:
[ bx ] = [ cos(t) sin(t) ] * [ x ] [3]
[ by ] [ sin(t) cos(t) ] [ y ]
Обратите внимание, что матрица является почти матрицей вращения (но не совсем -он выключается знаком минус.)
Разделите влево матрицу с обеих сторон, давая:
[ x ] = inverse ( [ cos(t) sin(t) ] * [ bx ] [4]
[ y ] [ sin(t) cos(t) ] ) [ by ]
Обратная матрица легко оценить для матрицы 2x2 и расширяется до:
[ x ] = (1/(cos(t)^2-sin(t)^2)) * [ cos(t) -sin(t) ] * [ bx ] [5]
[ y ] [-sin(t) cos(t) ] [ by ]
[5] дает две формулы:
x = (1/(cos(t)^2-sin(t)^2)) * ( bx * cos(t) - by * sin(t)) [6]
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t))
Легко, как пирог!