3

幅×高さの長方形があります。

その長方形内には、常に -45 ~ 45 度の ϴ 度だけ回転した別の長方形があり、外側の長方形と同じ中心を共有します。内側の長方形の面積が最大になるように w と h を見つける必要があります。

これは、少し説明するための (ゲットー) 画像です。ただし、長方形の角はおそらく接触しているはずだと思いますか?

ゲットーのイメージ

私が書きたい関数のプロトタイプは次のとおりです。

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

SizeD は、幅と高さが double の単なる構造体です。


私を正しい方向に導いてくれたコメントに感謝します!

私の解決策は、おそらく数学的には最適ではありませんが、内側の四角形の四隅すべてが外側の四角形に収まると、面積が最大化されると仮定することでした。

したがって:

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

この質問のトリッキーな部分は、内部の長方形の面積を計算する方法ではなく、考えられるすべての内部の長方形の中で最大の面積を持つのはどれですか?

まず、画像内のボックスが水平方向にどのようにスライドしても同じ領域であることを確認します。ボックスが右端の壁にスライドすると、次のように問題を簡単にパラメータ化できます。

内部ボックスが標準の向きに並ぶように、固定ボックスをオフセット角度だけ回転させると、この問題を考えるのが少し簡単になります。これが図です(Macで簡単に入力できるという理由だけで変更thetaしましbetaた。また、明確な理由で左端の壁を省略しました):

ここに画像の説明を入力

したがって、これは次のように構成されていると考えてください: 外側の長方形 (ここでは小さな円で示されています) の右側の点を選び、aこの点から角までの距離を記録し、この点に角がある最大の内部を構築します。 (垂直線と水平線を外側の長方形まで延長することにより)。明らかに、可能な最大の四角形は、 のさまざまな値から導出された四角形の 1 つであり、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、次に面積が始まります。再び減少します。

つまり、次の 2 つの場合があります。

1) a0 から への増加としてH/2、遠い内側の角が外側の反対側の壁に当たる場合、この接触が発生したときが最大の長方形になります (単調な増加、つまり正導関数の値)。これが解決策に対するあなたの推測です。

2) 奥の角が決して壁に触れない場合、最大の内側の長方形は になりますa=H/2

ここでは、それぞれの場合の内側の四角形の面積を明示的に解いていません。これは、証明よりもはるかに簡単な問題であり、証明に従うことができる人なら誰でも簡単に面積を計算できると思います (そして、長い時間がかかります)。これらのことを書き上げる時間です)。

于 2013-08-28T18:51:06.990 に答える