Rumah >pembangunan bahagian belakang >C++ >Bagaimana Anda Menentukan jika Dua Segi Empat Bertindih?

Bagaimana Anda Menentukan jika Dua Segi Empat Bertindih?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 04:08:25960semak imbas

How Do You Determine if Two Rectangles Overlap?

Menentukan Pertindihan Antara Segi Empat:

Pendekatan awal anda untuk menentukan pertindihan antara segi empat tepat nampaknya berdasarkan algoritma yang berbeza daripada yang dipautkan dalam soalan itu. Algoritma yang disediakan menggunakan perbandingan koordinat segi empat tepat yang lebih mudah, seperti ditunjukkan di bawah:

if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
    RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top) 

 // Assuming Left, Right, Top and Bottom are the coordinates of the rectangles along the X and Y axis

Dalam koordinat Cartesan, keadaan ini boleh dinyatakan sebagai:

if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
    RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)

Bukti oleh Percanggahan:

Syarat ini berdasarkan prinsip pembuktian dengan percanggahan. Jika mana-mana satu daripada syarat berikut adalah benar, maka segi empat tepat tidak boleh bertindih:

  • Tepi kiri RectA berada di sebelah kanan tepi kanan RectB (RectA sepenuhnya di sebelah kanan RectB)
  • Tepi kanan RectA berada di sebelah kiri tepi kiri RectB (RectA sepenuhnya di sebelah kiri RectB)
  • Pinggir atas RectA berada di bawah pinggir bawah RectB (RectA sepenuhnya di bawah RectB)
  • Pinggir bawah RectA berada di atas pinggir atas RectB (RectA sepenuhnya di atas RectB)

Oleh itu, syarat untuk bertindih adalah bertentangan dengan ini syarat:

  • Tepi kiri RectA berada di sebelah kiri tepi kanan RectB
  • Tepi kanan RectA berada di sebelah kanan tepi kiri RectB
  • Tepi atas RectA berada di atas Tepi bawah RectB
  • bahagian bawah RectA tepi berada di bawah tepi atas RectB

Nota Tambahan:

  • Algoritma ini menganggap bahawa segi empat tepat adalah selari dengan paksi X dan Y.
  • Untuk membenarkan pertindihan satu piksel, tukar < dan > operator ke <= dan >= pada sempadan yang berkaitan.
  • Algoritma boleh dilaraskan dengan mudah untuk sistem koordinat yang berbeza (cth., jika Y meningkat dari atas ke bawah).
  • Atas ialah kandungan terperinci Bagaimana Anda Menentukan jika Dua Segi Empat Bertindih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn