3
การค้นหาจุดสามเหลี่ยมที่อยู่ใน
สมมติว่าผมมี 2D ตาข่ายประกอบด้วยสามเหลี่ยม nonoverlapping {Tk}Nk=1{Tk}k=1N\{T_k\}_{k=1}^Nและชุดของจุด{pi}Mi=1⊂∪Nk=1TK{pi}i=1M⊂∪k=1NTK\{p_i\}_{i=1}^M \subset \cup_{k=1}^N T_K K วิธีที่ดีที่สุดในการกำหนดสามเหลี่ยมแต่ละจุดนั้นคืออะไร ตัวอย่างเช่นในภาพต่อไปนี้เรามี , ,ดังนั้นฉันต้องการฟังก์ชันที่ส่งคืนรายการ .p1∈T2p1∈T2p_1 \in T_2p2∈T4p2∈T4p_2 \in T_4p3∈T2p3∈T2p_3 \in T_2ffff(p1,p2,p3)=[2,4,2]f(p1,p2,p3)=[2,4,2]f(p_1,p_2,p_3)=[2,4,2] Matlab มีฟังก์ชั่นชี้ตำแหน่งซึ่งทำสิ่งที่ฉันต้องการสำหรับ Delaunay meshes แต่มันล้มเหลวสำหรับ mesh ทั่วไป ความคิดแรก (โง่) ของฉันคือสำหรับโหนดวนรอบสามเหลี่ยมทั้งหมดเพื่อหาสามเหลี่ยมp i ที่อยู่ในอย่างไรก็ตามนี่ไม่มีประสิทธิภาพมาก - คุณอาจต้องวนซ้ำทุกสามเหลี่ยมทุกจุดดังนั้นจึง สามารถทำงานO ( N ⋅ M )ได้pipip_ipipip_iO(N⋅M)O(N⋅M)O(N \cdot M) ความคิดต่อไปของฉันคือสำหรับทุกจุดค้นหาโหนดโหนดที่ใกล้ที่สุดผ่านการค้นหาเพื่อนบ้านที่ใกล้ที่สุดจากนั้นมองผ่านรูปสามเหลี่ยมที่แนบกับโหนดที่ใกล้ที่สุด ในกรณีนี้งานจะเป็นO ( a ⋅ M ⋅ l …