JDK API を使用してこれを行ってみませんか?
Rectangle rect1 = new Rectangle(100, 100, 200, 240);
Rectangle rect2 = new Rectangle(120, 80, 80, 120);
Rectangle intersection = rect1.intersection(rect2);
クラスを使用する場合java.awt.Rectangle
、コンストラクターのパラメーターは x、y、幅、高さです。x、y は四角形の左上隅です。左下のポイントを左上に簡単に変換できます。
上記をお勧めしますが、本当に自分でやりたい場合は、次の手順に従ってください。
たとえば(x1, y1), (x2, y2)
、Rect1 の左下と右下の角はそれぞれ、Rect2 の角です
(x3, y3), (x4, y4)
。
- の大きい方
x1
、x3
の小さい方x2
、x4
たとえばxL
を
xR
それぞれ
見つけます。
- の大きい方
y1
、y3
の小さい方y2
、y4
たとえばyT
を
yB
それぞれ
見つけます。
- の場合
yT >= yB
、交差点を返さない
- 戻り
(xL, yB, xR-xL, yB-yT)
ます。
より Java に似た擬似コード:
// Two rectangles, assume the class name is `Rect`
Rect r1 = new Rect(x1, y2, w1, h1);
Rect r2 = new Rect(x3, y4, w2, h2);
// get the coordinates of other points needed later:
int x2 = x1 + w1;
int x4 = x3 + w2;
int y1 = y2 - h1;
int y3 = y4 - h2;
// find intersection:
int xL = Math.max(x1, x3);
int xR = Math.min(x2, x4);
if (xR <= xL)
return null;
else {
int yT = Math.max(y1, y3);
int yB = Math.min(y2, y4);
if (yB <= yT)
return null;
else
return new Rect(xL, yB, xR-xL, yB-yT);
}
ご覧のとおり、長方形が元々 2 つの対角線の角で定義されていた場合は、簡単になります。その部分を実行するだけで済みます// find intersection
。