在缩放和旋转的矩形中查找点和大小

时间:2015-09-15 14:08:04

标签: javascript math matrix vector trigonometry

我有一个矩形1:绿色,具有以下属性:

x: 102, y: 121, width: 900, height: 900

我有一个子矩形,红色(与绿色1相关的属性):

x: 327, y: 415, width: 271, height: 183
  • 如果我将绿色缩小0.75并将其旋转30度,则同样适用于其孩子。

如何在缩放和旋转的绿色内计算红色孩子的大小和位置(灰色) 与非相同旋转/缩放红色?

http://codepen.io/christianpugliese/pen/RWWdvN?editors=001

enter image description here

1 个答案:

答案 0 :(得分:0)

让我们更加数学。我们有一个带坐标的绿色广场

g = {(102,121),(1002,121),(1002,1021),(102,1021)}

和带坐标的红色矩形

r={{327,415),(498,415),(498,598),(327,598)}.

G的中心是(552,571)。

设T是从中心到原点的平移。 S是原点的0.75,旋转30°。用矩阵表示

T = (-552)
    (-571)

S = (0.75, 0   )
    (0   , 0.75)

R = (cos 30, -sin 30)
    (sin 30,  cos 30)

完全转变为点p =(x,y)是

T' R S T' p

= T' R S (x-552, y-571)

= T' R (0.75*(x-552), 0.75*(y-571))

= T' (cos 30 * (0.75*(x-552) -sin 30 * 0.75*(y-571))
     (sin 30 * (0.75*(x-552) +cos 30 * 0.75*(y-571))

= ( cos 30 * (0.75*(x-552) -sin 30 * 0.75*(y-571) + 552 )
  (sin 30 * (0.75*(x-552) +cos 30 * 0.75*(y-571) + 571  )

如果我们让矩形具有边界x1,xh,yl,yh,则角是(x1,y1),...(xh,yh)。我们将变换应用于每个角,给予点A =(ax,ay),B,C,D。我们需要确保每个点都在矩形内,因此xl< = ah<< XH。

这给出了一组要求解的方程。哪个应该可行。