如何在未旋转的矩形内找到旋转矩形的尺寸,使区域最大化?

时间:2013-08-27 18:13:31

标签: math

我有一个W x H的矩形。

在该矩形内是另一个旋转Θ度的矩形,它始终在-45到45度之间,并且与外部矩形共享相同的中心。我需要找到w和h,以使内部矩形的面积最大化。

这是一个(贫民窟)图像来说明一点。虽然,矩形的角应该是触摸的,我假设?

Ghetto Image

这是我要写的函数的原型:

SizeD GetMaxRectangleSize(double outerWidth, double outerHeight, float angle)

SizeD只是一个宽度和高度为双精度的结构。


感谢评论指引我朝着正确的方向前进!

我的解决方案,虽然可能不是数学上最优的,但假设如果内部矩形的所有四个角落在外部矩形上,则区域将最大化。

因此:

H = wSin(ϴ) + hCos(ϴ)

W = wCos(ϴ) + hSin(ϴ)

求解w和h并代入给出:

h = (HCos(ϴ) - WSin(ϴ))/(cos(ϴ)^2 - sin(ϴ)^2)

w = (WCos(ϴ) - HSin(ϴ))/(cos(ϴ)^2 - sin(ϴ)^2)

哪种情况适用于Θ= [0,45],而(-45,0)应该起作用。

1 个答案:

答案 0 :(得分:2)

这个问题的棘手部分不是如何计算内部矩形的面积,而是所有可能的内部矩形中哪一个具有最大面积?

首先,观察图像中的方框是否是相同的区域,无论它是如何水平滑动的,如果它滑到最右边的墙上,它可以轻松地将问题参数化如下: / p>

我发现更容易想到这个问题,固定盒旋转偏移角度,使内部盒子以标准方向排列。这是一个数字(我已将theta更改为beta,因为我可以在Mac上轻松输入,并且由于明确的原因也离开了最左边的墙:

enter image description here

所以想想这个构造如下:在外部矩形的右侧选择一个点(这里用一个小圆圈显示),注意从这一点到角落的距离a,构造最大的可能的内部有一个角落(通过将垂直和水平线延伸到外部矩形)。显然,最大可能的矩形是从a的不同值派生的矩形之一,而a是此问题的一个很好的参数。

因此,内部矩形的区域是:

A = (a * (H-a))/(cosß * sinß)

or, A = c * a * (H-a)

我把恒定的三角项折叠成常数c。我们需要最大化这个,并且要做到这一点,衍生物是有用的:

dA/da = c * (H - 2a)

也就是说,从a=0开始(即图中的圆圈位于外部矩形的下角,形成一个高大的超级皮肤内部矩形),然后是内部矩形的区域< strong>单调增加直到a=H/2 ,然后该区域再次开始减少。

也就是说,有两种情况:

1)如果当a从0增加到H/2时,远处的内部角落到外部的相对墙壁,那么最大可能的矩形就是这种接触发生时(你知道它是由于单调增加而产生的最大值 - 即衍生物的正值。这是你对解决方案的猜测。

2)如果远角从不接触墙,那么最大的内部矩形将位于a=H/2

我没有明确地解决每个案例的内部矩形区域,因为这比证明要容易得多,任何能够遵循证明的人,我认为可以轻松计算出区域(并且花很长时间写这些东西)。