วิธีการแยกจากแผนภาพVoronoïอย่างไร


13

ฉันคำนวณไดอะแกรมVoronoïจากชุดของคะแนน (ด้วยBoost.polygon )

ฉันพยายามหา Delaunay triangulation ซึ่งเชื่อมต่อแต่ละศูนย์ของเซลล์สำหรับแต่ละVoronoï แต่ฉันพลาดบางส่วน

ในภาพต่อไปนี้จุดสีแดงคือจุดเริ่มต้นของฉันเส้นสีฟ้าคือขอบVoronoï (ฉันไม่สนใจขอบไม่มีที่สิ้นสุด) และเส้นสีเขียวคือขอบสามเหลี่ยม (หนึ่งขอบสีเขียวสำหรับขอบสีฟ้าแต่ละจุด

เราจะเห็นว่าเส้นทแยงมุมหายไป ฉันกำลังคิดถึงอะไร

แผนภาพ voronoi

คำตอบ:


19

จุดกึ่งกลางในไดอะแกรมของคุณเป็นขอบที่ลดลงของแผนภาพ Voronoi หากคุณสร้างไดอะแกรม Voronoi สำหรับคลาวด์จุดที่ผิดปกติจุดยอดทุกอันจะมีระดับ 3 จุดยอดที่มีระดับ 4 (หรือมากกว่า) สามารถเกิดขึ้นได้เมื่อจุดยอดสองจุดขึ้นไปตรงกัน นั่นหมายความว่ามีความยาวเป็นศูนย์ระหว่างพวกเขา แต่ขอบนั้นควรยังคงมีขอบที่สอดคล้องกันในการวิเคราะห์สามเหลี่ยม Delaunay ปัญหาคือว่ามันเป็นไปตามอำเภอใจซึ่งเป็นหนึ่งในสองขอบที่คุณเลือกเนื่องจากขอบความยาวศูนย์ไม่มีทิศทางที่เกี่ยวข้อง

เพื่อให้เห็นภาพสิ่งที่ฉันกำลังพูดถึงให้พิจารณาเริ่มต้นด้วยจุดที่มีระยะห่างน้อยกว่าสี่จุดอย่างสม่ำเสมอ (เช่นที่เราเริ่มต้นด้วยจุดยอดองศา -3 เท่านั้น) และค่อย ๆ แปลตำแหน่งเหล่านั้นเป็นตำแหน่งปกติ

เราสามารถทำได้สองวิธีที่แตกต่างกันซึ่งทั้งสองอย่างนี้นำไปสู่กรณีความเสื่อมในแผนภาพของคุณ คุณจะเห็นว่าคุณได้พบกับ Delaunay triangulations สองแบบซึ่งเป็นขีด จำกัด ที่ใช้ได้สำหรับกรณีเลว

ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่

ฉันคิดว่ารหัสของคุณหายไปจากกรณีเลวร้ายนี้ด้วยเหตุผลใดเหตุผลหนึ่ง แต่โดยไม่ได้เห็นว่าคุณคำนวณสามเหลี่ยม Delaunay จากแผนภาพ Voronoi ได้อย่างไรมันเป็นไปไม่ได้ที่จะชี้ให้คุณเห็นมากกว่านี้

นอกจากนี้โปรดทราบว่าการมีความเสื่อมที่สูงขึ้น (โดยการกระจายมากกว่าสี่จุดในมุมที่เท่ากันรอบวงกลม) อาจต้องการความสนใจเพิ่มเติม:

ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่

ภาพเคลื่อนไหวเหล่านี้ยังแสดงให้เห็นว่า (แม้ในกรณีที่ไม่เลว) ขอบ Voronoi และ Delaunay ที่เกี่ยวข้องไม่จำเป็นต้องข้ามในขอบเขตจริง นั่นอาจทำให้ยากขึ้นที่จะเห็นว่าขอบ 2 (หรือ 3) ที่เป็นรูปสามเหลี่ยมรูปหลายเหลี่ยมในตอนท้ายนั้นตรงกับขอบที่เสื่อมหลาย ๆ อันซึ่งอยู่ตรงกลาง โปรดสังเกตว่าทั้งหมดมีรูปสามเหลี่ยมห้าเหลี่ยมที่แตกต่างกัน 5 รูปห้าเหลี่ยมและรูปสามเหลี่ยมหกเหลี่ยม 14 รูปสามเหลี่ยม (แม้ว่าฉันไม่รู้ว่าสามารถรับ 14 รูปทั้งหมดได้ด้วยการเปลี่ยนรูปสามเหลี่ยมที่ไม่เสื่อมสภาพ)

แก้ไข (โดย OP)

แผนภาพ Voronoi ที่คำนวณด้วยBoost.polygonช่วยให้สามารถเดินผ่านจุดยอด Voronoi แต่ละจุดและแต่ละขอบเชื่อมโยงกับจุดยอดเหล่านั้น (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา) ด้วยวิธีนี้มันเป็นไปได้ที่จะสร้างรูปสามเหลี่ยมหนึ่งอันสำหรับแต่ละคู่ของขอบ (ขอบที่เชื่อมต่อสองอันจะเชื่อมโยงกับ 3 เซลล์)


คุณสามารถตอบได้ที่นี่เช่นกันหรือฉันจะลบคำถามอื่นของฉัน
arthur.sw

3
@ arthur.sw การโพสต์ข้ามเป็นสิ่งที่ไม่ควรทำใน SE ดังนั้นฉันคิดว่าการลบมันจะมีตัวเลือกที่ดีกว่า
Martin Ender

ผู้สร้างไดอะแกรมvoronoïแบบอินเทอร์แอคทีฟ: alexbeutel.com/webgl/voronoi.html
arthur.sw

ดูstackoverflow.com/questions/34342038/สำหรับรหัส
Giovanni Funchal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.