1

1つの長方形に2番目の長方形が含まれているかどうかを確認する小さなプログラムを作成しようとしています。境界間の距離は、100や50などの特定の数値よりも小さくする必要があります。Rectangle.containsメソッドを使用すると、両方の長方形の境界間の距離は気になりません。 。これを達成する方法はありますか?

4

4 に答える 4

2

contains(Rectancle r)メソッドを 2 回使用できます。最初に内側の四角形が外側の四角形の内側にあるかどうかを確認し、次に内側の四角形をしきい値の半分だけすべての方向に一時的に拡大し、同じチェックを再度行います。今度は外側の四角形の中にもう入ってはいけません。したがって、基本的には次のようなものです。

//Rectangle outer;  // Do some proper setup for these two
//Rectangle inner;
int limit = 50;
boolean containsWithinLimits = outer.contains(inner);
inner.setLocation(inner.getX()-limit/2, inner.getY()-limit/2);
inner.setSize(inner.getWidth()+limit, inner.getHeight()+limit);
boolean containsWithinLimits = containsWithinLimits && !outer.contains(inner);
// Now reset the bounds:
inner.setLocation(inner.getX()+limit/2, inner.getY()+limit/2);
inner.setSize(inner.getWidth()-limit, inner.getHeight()-limit);
于 2012-06-09T12:33:21.280 に答える
1

長方形が直交している場合、あなたがと呼んでいると思いますcontains(Rectangle rect)。次に、追加の比較を行うだけです。

inside.x - outside.x >= LEFT_BORDER &&
outside.x + outside.width - inside.x - inside.width >= RIGHT_BORDER &&
inside.y - outside.y >= TOP_BORDER &&
outside.y + outside.height - inside.y - inside.height >= BOTTOM_BORDER

LEFT_BORDER、、、RIGHT_BORDERはあなたが定義するためのものですTOP_BORDERBOTTOM_BORDER

于 2012-06-09T12:17:08.627 に答える
1

サンプルコードなど?

それでも、次のことを行う必要があります。間違っていない限り。

擬似コード:

rectA = outside, rectB = inside
if rectB.left - rectA.left < x then distance is ok else do something
if rectB.top - rectA.top < y then distance is ok else do something

などなど

于 2012-06-09T12:13:57.787 に答える
0

Rectangle2d では、

boolean contains(double x, double y)

  ---    Tests if a specified coordinate is inside the boundary of this Rectangle2D.

boolean contains(double x, double y, double w, double h)

  ---   Tests if the interior of this Rectangle2D entirely contains the specified set of rectangular coordinates.

そのため、私の知る限り、距離については確認できません...

于 2012-06-09T12:13:48.347 に答える