Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaedah Manakah yang Lebih Cekap untuk Pengesanan Titik-dalam-Polygon: Pengesanan Ray atau laluan Matplotlib.contains_points?

Kaedah Manakah yang Lebih Cekap untuk Pengesanan Titik-dalam-Polygon: Pengesanan Ray atau laluan Matplotlib.contains_points?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 19:33:03305semak imbas

Which Method is More Efficient for Point-in-Polygon Detection: Ray Tracing or Matplotlib's path.contains_points?

Pengesanan Titik-dalam-Polygon yang Cekap dalam Python

Menentukan sama ada titik terletak dalam poligon ialah tugas yang kerap dalam geometri pengiraan. Mencari kaedah yang cekap untuk tugas ini adalah berfaedah apabila menilai sejumlah besar mata. Di sini, kami meneroka dan membandingkan dua kaedah yang biasa digunakan: pengesanan sinar dan fungsi laluan Matplotlib.contains_points.

Kaedah Pengesanan Sinar

Kaedah pengesanan sinar bersilang dengan sinar mendatar dari titik yang diperiksa dengan sisi poligon. Ia mengira bilangan persilangan dan menentukan sama ada titik itu berada di dalam poligon berdasarkan paritinya.

Fungsi laluan Matplotlib.contains_points

Fungsi laluan Matplotlib.contains_points menggunakan a objek laluan untuk mewakili poligon. Ia menyemak sama ada titik yang diberikan terletak dalam laluan yang ditentukan. Fungsi ini selalunya lebih pantas daripada pendekatan pengesanan sinar, seperti yang dilihat dalam coretan kod yang disediakan:

<br>dari masa import masa<br>import matplotlib.path sebagai mpltPath</p>
<h1>Polygon dan titik rawak</h1>
<p>poligon = [[np.sin(x) 0.5, np.cos(x) 0.5] untuk x dalam np.linspace(0, 2*np.pi, 100)]<br>mata = np.random.rand(10000, 2)</p>
<h1>Ray mengesan masa berlalu</h1>
<p>masa_mula = masa()<br>dalam1 = [ray_tracing_method(point[0], point[1], polygon) for point in points]<br>print("Ray Tracing Elapsed time: " str(time() - start_time))</p>
<h1>Matplotlib contains_points elapsed masa</h1>
<p>masa_mula = masa()<br>laluan = mpltPath.Path(polygon)<br>inside2 = path.contains_points(points)<br>print("Matplotlib contains_points Masa berlalu: " str(time() - start_time))<br>

Kod di atas melaporkan masa pelaksanaan yang jauh lebih pantas untuk pendekatan Matplotlib berbanding dengan pengesanan sinar.

Pilihan Lain

Selain kaedah ini, pakej Shapely yang direka khusus untuk operasi geometri menyediakan fungsi yang cekap untuk semakan titik dalam poligon.

Atas ialah kandungan terperinci Kaedah Manakah yang Lebih Cekap untuk Pengesanan Titik-dalam-Polygon: Pengesanan Ray atau laluan Matplotlib.contains_points?. 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