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!