2016-06-28 11 views
0

私は円を持っており、矩形が内側にあるかどうかをチェックする必要があります。 長方形の最も遠い角を見つけて、それが円の内側にあるかどうかを確認したいと思います。私は最初の部分に問題があります。矩形の最も遠い点

dx = max(centerX - rectLeft, rectRight - centerX); 
dy = max(centerY - rectTop, rectBottom - centerY); 

しかしISN、Tをその間違った: は、私は人々がやることを見ましたか?例えば、私があるため17スタンドさらに中心よりもOKでないcenter (5,6)topLeft (-2,-3width=9height=8

dx = max(5 - -2, -2 + 9 - 5) = max(7, 2) which is 7 = OK 

しかし

dy = max(6 - -3, -3 - 8 - 6) = max(9, -17) = 9 

を有します。私は間違っていますか、-17の代わりに17を作るのにfabsを使うべきですか?

+0

これは動作しません。あなたは中心から各コーナーの距離を見つける必要があります。左上隅がY距離より大きいが、右下隅がX距離より大きいと仮定する。あなたはmaxXとmaxYのどちらかを取るでしょう。 – stark

+0

サークルの半径はどのくらいですか? –

答えて

1

はい。常に距離が正である必要があるため、距離の問題には常にfabs()を使用してください。

+1

私は実際には四角形を実際に必要としますので、これを行いました 'max((centerX-rectLeft)*(centerX-rectLeft)、(centerX-rectRight)*(centerX- rectRight))' – Gigata

1

上記のdxとdyの方法は必ずしも機能しません。 dx*dx + dy*dy < r*rは、矩形が円内にあると結論付けるのに必要な条件ではありますが、十分ではありません。

代わりにこのように問題を考えます。円の中心から最も離れた矩形上の点は、矩形の頂点の1つになります。簡単にするため、原点(0、0)で円(半径= r)を想像してください。高さh、幅wの頂点と(x、y)の頂点を想像してみましょう。残りの頂点は、(x、y-h)、(x + w、y)および(x + w、y-h)となる。ここで、矩形が完全に円の内側にあることを確認するには、矩形の各頂点が円内にあることを確認するだけで十分です。条件は次のとおりです。

​​

上記のいずれかが当てはまらない場合、矩形は完全に円の内側にはありません。

+0

4を計算する必要はありません最大xとyの距離を持つものだけ – 4386427

2

私は正しい式があるべきだと思う:長方形の側面が軸に平行である場合、これがあれば確立するために十分である

dx*dx + dy*dy < r*r 

dx = max(fabs(rectLeft - centerX), fabs(centerX - rectRight)); 
dy = max(fabs(rectTop - centerY), fabs(centerY - rectBottom)); 

ならば、あなたは確認することができます矩形が内側にある場合、最初の公式では、円の中心から最も外側の頂点に対応する値に、dxdyを設定していることを考慮してください。

関連する問題