3

我有一个宽 x 高的矩形。

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

这是一个(贫民窟)图像来说明一点。不过,我认为矩形的角可能应该是接触的?

贫民窟形象

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

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] 的行为应该相同。

4

1 回答 1

2

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

首先,观察图像中的框是相同的区域,不管它是如何水平滑动的,如果它滑动到最右边的墙上,它允许对问题进行简单的参数化,如下所示:

我发现考虑这个问题更容易一些,固定框旋转偏移角度,使内部框以标准方向排列。这是一个数字(我已经更改thetabeta只是因为我可以在 Mac 上轻松输入它,并且出于清楚的原因也离开了最左边的墙):

在此处输入图像描述

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

因此,鉴于此,内部矩形的面积为:

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

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

我将常量三角项折叠到常量中c。我们需要最大化这一点,并且要做到这一点,导数是有用的:

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

即从a=0(即图中的圆在外部矩形的下角,产生一个高大超皮肤的内部矩形)开始,然后内部矩形的面积单调递增直到a=H/2,然后面积开始再次减少。

也就是说,有两种情况:

1)如果a从0H/2增加到衍生品的价值)。这是您对解决方案的猜测。

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

我没有在这里明确解决每种情况下内部矩形的面积,因为这比证明要容易得多,而且我认为任何可以遵循证明的人都可以轻松计算面积(而且确实需要很长时间是时候写这些东西了)。

于 2013-08-28T18:51:06.990 回答