Periksa Jika Dua Persegi Panjang Bertindih Di Jawa

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar menyelesaikan masalah algoritma untuk memeriksa sama ada kedua segi empat yang diberikan bertindih.

Kita akan mulakan dengan melihat definisi masalah dan kemudian secara beransur-ansur membina penyelesaian.

Akhirnya, kami akan melaksanakannya di Java.

2. Definisi Masalah

Katakan kita mempunyai dua segi empat yang diberi - r1 dan r2 . Kita perlu memeriksa sama ada terdapat sekurang-kurangnya satu titik yang sama antara r1 dan r2 . Sekiranya ya, ini bermaksud bahawa kedua-dua segi empat ini bertindih.

Mari kita lihat beberapa contoh:

Sekiranya kita melihat kes terakhir, segiempat tepat r1 dan r2 tidak mempunyai sempadan. Namun, mereka bertindih segi empat kerana setiap titik di r1 juga merupakan titik di r2 .

3. Persediaan Awal

Untuk menyelesaikan masalah ini, kita harus mula-mula dengan menentukan segi empat tepat secara terprogram. Segi empat tepat dengan mudah ditunjukkan oleh koordinat kiri bawah dan kanan atas:

public class Rectangle { private Point bottomLeft; private Point topRight; //constructor, getters and setters boolean isOverlapping(Rectangle other) { ... } }

di mana Titik adalah kelas yang mewakili titik (x, y) di ruang:

public class Point { private int x; private int y; //constructor, getters and setters }

Kami kemudian akan menentukan kaedah isOverlapping (Rectangle other) di kelas Rectangle kami untuk memeriksa sama ada ia bertindih dengan segi empat tepat yang lain - yang lain .

4. Penyelesaian

Kedua-dua segi empat yang diberikan tidak akan bertindih sekiranya salah satu daripada syarat di bawah ini berlaku:

  1. Salah satu daripada dua segi empat tepat berada di atas tepi atas segiempat tepat yang lain
  2. Salah satu daripada dua segi empat tepat berada di sebelah kiri tepi kiri segi empat yang lain

Untuk semua kes lain, kedua-dua segi empat itu akan saling bertindih. Untuk meyakinkan diri kita, kita selalu dapat menarik beberapa contoh.

5. Pelaksanaan Java

Sekarang setelah kita memahami penyelesaiannya, mari kita laksanakan kaedah isOverlapping () kami :

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

Kaedah isOverlapping kami () dalam kelas Rectangle mengembalikan salah sekiranya salah satu segi empat tepat di atas atau ke kiri sebelah yang lain, benar jika tidak.

Untuk mengetahui sama ada satu segi empat tepat di atas yang lain, kita membandingkan koordinat y mereka . Begitu juga, kita membandingkan koordinat-x untuk memeriksa sama ada satu segi empat tepat di sebelah kiri yang lain.

6. Kesimpulannya

Dalam artikel pendek ini, kami belajar bagaimana menyelesaikan masalah algoritma untuk mencari sama ada kedua-dua segi empat tepat yang saling bertindih antara satu sama lain. Ia berfungsi sebagai strategi pengesanan perlanggaran untuk dua objek segi empat tepat.

Seperti biasa, keseluruhan kod sumber tersedia di Github.