Javaで2つの長方形が重なっているかどうかを確認

Javaで2つの四角形が重なっているかどうかを確認する

1. 概要

このクイックチュートリアルでは、指定された2つの長方形が重なっているかどうかを確認するアルゴリズムの問​​題を解決する方法を学習します。

まず、問題の定義を確認してから、徐々に解決策を構築していきます。

最後に、Javaで実装します。

2. 問題定義

与えられた2つの長方形(r1r2)があるとしましょう。 r1r2の間に少なくとも1つの共通点があるかどうかを確認する必要があります。 はいの場合、これらの2つの長方形が重なっていることを意味します。

いくつかの例を見てみましょう。

image

最後のケースに気付いた場合、長方形r1r2には交差する境界がありません。 それでも、r1のすべてのポイントはr2のポイントでもあるため、長方形は重なり合っています。

3. 初期設定

この問題を解決するには、まずプログラムで四角形を定義することから始めます。 A rectangle can be easily represented by its bottom-left and top-right coordinates:

public class Rectangle {
    private Point bottomLeft;
    private Point topRight;

    //constructor, getters and setters

    boolean isOverlapping(Rectangle other) {
        ...
    }
}

ここで、Pointは、空間内の点(x,y)を表すクラスです。

public class Point {
    private int x;
    private int y;

    //constructor, getters and setters
}

後で、RectangleクラスでisOverlapping(Rectangle other)メソッドを定義して、別の指定された長方形(other)とオーバーラップするかどうかを確認します。

4. 溶液

以下の条件のいずれかの2つのgiven rectangles won’t overlap ifが当てはまります。

  1. 2つの長方形のうちの1つは、他の長方形の上端の上にあります

  2. 2つの長方形のうちの1つは、他の長方形の左端の左側にあります

image

他のすべての場合、2つの長方形は互いに重なります。 納得させるために、いつでもいくつかの例を引き出すことができます。

5. Java実装

ソリューションを理解したので、isOverlapping()メソッドを実装しましょう。

public boolean isOverlapping(Rectangle other) {
    if (this.topRight.getY() < other.bottomLeft.getY()
      || this.bottomLeft.getY() > other.topRight.getY()) {
        return false;
    }
    if (this.topRight.getX() < other.bottomLeft.getX()
      || this.bottomLeft.getX() > other.topRight.getX()) {
        return false;
    }
    return true;
}

RectangleクラスのisOverlapping()メソッドは、長方形の1つが他の長方形の上または左側にある場合はfalseを返し、それ以外の場合はtrueを返します。

1つの長方形が他の長方形の上にあるかどうかを確認するために、それらのy-coordinatesを比較します。 同様に、x-coordinatesを比較して、一方の長方形がもう一方の長方形の左側にあるかどうかを確認します。

6. 結論

この短い記事では、2つの与えられた長方形が互いに重なり合うかどうかを見つけるというアルゴリズムの問​​題を解決する方法を学びました。 これは、2つの長方形オブジェクトの衝突検出戦略として機能します。

いつものように、ソースコード全体が利用可能ですover on Github.