Saya punya 2 poligon. Saya tahu koordinat titik kedua poligon. Apa cara terbaik untuk memeriksa apakah ada yang benar-benar di dalam yang lain? Misalnya, algoritme seharusnya hanya mengenali trapesium hitam di bawah ini sebagai yang terkandung:
collision-detection
vector
geometry
pengguna960567
sumber
sumber
Jawaban:
Ada ton cuplikan sumber untuk metode yang melakukan tes untuk " titik di dalam poligon ". Prinsipnya berasal dari teorema kurva Jordan untuk poligon ( http://www-cgrl.cs.mcgill.ca/~godfried/teaching/cg-projects/97/Octavian/compgeom.html ).
Cara naif adalah: memiliki metode itu, sebut saja
PointInsidePolygon(Point p, Polygon poly)
:Secara teoritis, seharusnya tidak melewatkan skenario apa pun untuk poligon Anda, tetapi itu bukan solusi optimal.
Keterangan kasus "Tepi"
PointInsidePolygon(..)
harus mengembalikan true jika titik berada di perbatasan poligon (baik terletak di tepi atau merupakan titik)EdgesIntersect(..)
harus mengembalikan false jikainnerEdge
subset (bijaksana secara geometris) dariouterEdge
. Dalam hal ini, tepinya jelas berpotongan, tetapi untuk tujuan algoritma, kita perlu menunjukkan bahwa persimpangan tidak melanggar semantik di belakangisInside
variabelRemakr Umum :
tanpa pemeriksaan tepi vs tepi, seperti yang ditunjukkan dalam komentar, pendekatan tersebut mungkin mengembalikan positif palsu untuk beberapa poligon cekung (misalnya quad berbentuk V dan persegi panjang - persegi panjang mungkin memiliki semua simpulnya di dalam bentuk V, tetapi memotongnya , sehingga memiliki setidaknya beberapa area di luar).
setelah satu memeriksa setidaknya satu dari simpul poligon dalam berada di dalam yang luar, dan jika tidak ada tepi berpotongan, itu berarti kondisi yang dicari terpenuhi.
sumber
Coba lakukan persimpangan garis dengan setiap garis merah. Dalam pseudocode:
Namun, seperti yang Anda lihat, solusi ini akan lebih lambat saat Anda menambahkan lebih banyak poligon untuk diperiksa. Solusi yang berbeda dapat berupa:
Solusi ini sangat cepat, tetapi tergantung pada implementasi Anda (dan apa yang ingin Anda lakukan dengan hasil pemeriksaan Anda) solusi apa yang paling cocok untuk Anda.
sumber