Solution
给定边界框尺寸bx
by by
and t
是矩形尺寸的逆时针旋转x
by 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
and b
,在矩形的角处。用三角函数来表达bx
按照x
, y
, and 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 https://i.stack.imgur.com/Oq85E.jpg and 2 http://www.mathwords.com/i/inverse_of_a_matrix.htm可以用矩阵形式表示为:
[ bx ] = [ cos(t) sin(t) ] * [ x ] [3]
[ by ] [ sin(t) cos(t) ] [ y ]
请注意,矩阵是nearly旋转矩阵(但不完全是 - 它有一个负号。)
将矩阵左除两边,得到:
[ x ] = inverse ( [ cos(t) sin(t) ] * [ bx ] [4]
[ y ] [ sin(t) cos(t) ] ) [ by ]
矩阵的逆矩阵是易于计算 2x2 矩阵 http://www.mathwords.com/i/inverse_of_a_matrix.htm并扩展到:
[ 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))
易如反掌!