สมมติว่าผมมี 2D ตาข่ายประกอบด้วยสามเหลี่ยม nonoverlapping และชุดของจุด K วิธีที่ดีที่สุดในการกำหนดสามเหลี่ยมแต่ละจุดนั้นคืออะไร
ตัวอย่างเช่นในภาพต่อไปนี้เรามี , ,ดังนั้นฉันต้องการฟังก์ชันที่ส่งคืนรายการ .
Matlab มีฟังก์ชั่นชี้ตำแหน่งซึ่งทำสิ่งที่ฉันต้องการสำหรับ Delaunay meshes แต่มันล้มเหลวสำหรับ mesh ทั่วไป
ความคิดแรก (โง่) ของฉันคือสำหรับโหนดวนรอบสามเหลี่ยมทั้งหมดเพื่อหาสามเหลี่ยมp i ที่อยู่ในอย่างไรก็ตามนี่ไม่มีประสิทธิภาพมาก - คุณอาจต้องวนซ้ำทุกสามเหลี่ยมทุกจุดดังนั้นจึง สามารถทำงานO ( N ⋅ M )ได้
ความคิดต่อไปของฉันคือสำหรับทุกจุดค้นหาโหนดโหนดที่ใกล้ที่สุดผ่านการค้นหาเพื่อนบ้านที่ใกล้ที่สุดจากนั้นมองผ่านรูปสามเหลี่ยมที่แนบกับโหนดที่ใกล้ที่สุด ในกรณีนี้งานจะเป็นO ( a ⋅ M ⋅ l o g ( N)โดยที่ aคือจำนวนสามเหลี่ยมสูงสุดที่ยึดติดกับโหนดใด ๆ ในตาข่าย มีสองประเด็นที่แก้ไขได้ แต่น่ารำคาญด้วยวิธีนี้
- มันต้องใช้การค้นหาเพื่อนบ้านที่ใกล้ที่สุดที่มีประสิทธิภาพ (หรือการค้นหาห้องสมุดที่มี) ซึ่งอาจเป็นงานที่ไม่สำคัญ
- มันต้องการการจัดเก็บรายการที่ติดสามเหลี่ยมไว้กับแต่ละโหนดซึ่งขณะนี้โค้ดของฉันยังไม่ได้ตั้งค่า - ตอนนี้มีเพียงรายการของพิกัดโหนดและรายการองค์ประกอบ
ดูเหมือนว่าไม่เหมาะสมทั้งหมดและฉันคิดว่าควรจะมีวิธีที่ดีกว่า นี่เป็นปัญหาที่เกิดขึ้นมากมายดังนั้นฉันจึงสงสัยว่าใครจะแนะนำวิธีที่ดีที่สุดในการค้นหาว่าโหนดใดมีสามเหลี่ยมอยู่ในนั้นไม่ว่าในทางทฤษฎีหรือในแง่ของห้องสมุดที่มีอยู่
ขอบคุณ!