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

Javascript 在缩放和旋转的矩形中查找点和大小,javascript,math,matrix,vector,trigonometry,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度,则相同的设置将应用于其子对象。 如何计算缩放和旋转绿色内的灰色whist红色子对象的大小和位置,使其与非旋转/缩放红色相同 让我们把它数学化一点。我们有一个绿色的广场 g = {(102,121),(1002,12

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

x: 102, y: 121, width: 900, height: 900
其中有一个子矩形,红色属性与绿色1相关:

x: 327, y: 415, width: 271, height: 183
如果我将绿色缩小0.75并将其旋转30度,则相同的设置将应用于其子对象。 如何计算缩放和旋转绿色内的灰色whist红色子对象的大小和位置,使其与非旋转/缩放红色相同


让我们把它数学化一点。我们有一个绿色的广场

g = {(102,121),(1002,121),(1002,1021),(102,1021)}
和红色长方形的坐标

r={{327,415),(498,415),(498,598),(327,598)}.
G的中心是552571

T是从中心到原点的平移。S是围绕原点缩放0.75,R是旋转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  )

如果我们让矩形有边框xl,xh,yl,yh,角是xl,yl。。。xh,yh。我们将变换应用于每个角点,给出点A=ax,ay,B,C,D。我们需要确保每个点都在矩形内,所以xl需要旋转坐标系中的位置吗?如果是,只需将所有值按比例相乘。绿色矩形的旋转和放大中心在哪里?它是否围绕其中心旋转?@MBo已经尝试过,乘法仅适用于大小,不适用于大小position@Salixalba,是的,在它的中心我有一个密码笔: