กำลังหาบรรทัดกลางอุโมงค์?


19

ฉันมีไฟล์แผนที่บางไฟล์ที่ประกอบด้วย 'polylines' (แต่ละบรรทัดเป็นเพียงรายการของจุดยอด) ที่แสดงถึงอุโมงค์และฉันต้องการลองค้นหาอุโมงค์ 'เส้นกลาง' (แสดงโดยประมาณเป็นสีแดงด้านล่าง)

ข้อความแสดงแทน

ฉันประสบความสำเร็จในอดีตโดยใช้Delaunay triangulationแต่ฉันต้องการหลีกเลี่ยงวิธีการนี้เนื่องจากไม่ได้ (โดยทั่วไป) ทำให้สามารถแก้ไขข้อมูลแผนที่ของฉันได้ง่าย / บ่อยครั้ง

มีความคิดเห็นเกี่ยวกับวิธีที่ฉันอาจทำสิ่งนี้ได้อย่างไร

ฉันทำงานใน C ++ ที่ค่อนข้างดิบ


gis.stackexchange.com/q/177/162ยังเกี่ยวข้องกับสิ่งที่คุณกำลังมองหา: อัลกอริทึม skeletisation
julien

3
ฉันคิดว่า cross link กับ SO นั้นมีความเกี่ยวข้องเนื่องจากมีคำตอบอยู่ที่stackoverflow.com/questions/3983613/find-tunnel-center-line
Dr. belisarius

@julien: คุณเชื่อมโยงไปแล้วในคำตอบของคุณ ฉันอ่านมัน แต่ก็ไม่ได้ตอบคำถามเฉพาะของฉัน (ซึ่งในการใช้ถ้อยคำใหม่คือ: 'ฉันรู้วิธีหา MAT แล้ว - แต่ฉันสงสัยว่าถ้าใครรู้อัลกอริธึมที่ไม่ใช่ Delaunay [นั่นไม่ใช่ lib - ปัญหาไม่ใช่การเข้ารหัสของฉัน;)] ที่มีประสิทธิภาพสำหรับการเปลี่ยนแปลงในภาษาท้องถิ่น ') มีคำตอบเกี่ยวกับ SO ที่ไม่ได้ตอบอย่างใดอย่างหนึ่ง แต่ใช้ความพยายามอย่างมากและให้ฉันคิดมากดังนั้นฉันจึงได้รับรางวัลจากผู้ชายคนนั้นจนกระทั่งมีบางสิ่งที่ดีกว่าเข้ามา ไม่มีคำตอบด้านล่างที่ดี (ซึ่งอาจเป็นความผิดของฉัน)
sje397

คำตอบ:


6

คุณวาดภาพการเปลี่ยนแปลงแกนกลางได้ดี การหาสมการ Delaunay เป็นวิธีที่ดี (ความท้าทายหลักคือส่วนของ MAT เป็นชิ้นส่วนของพาราโบลาไม่ใช่แค่ส่วนของเส้น)

ฉันได้ทำงานข้ามการอ้างอิงถึงรหัสการทำงาน (มักจะอยู่ใน C / C ++ ฉันจำได้) ในวรรณคดีเชิงวิชาการ ค้นหาใน Google Scholar และค้นหาเอกสารเก่า ๆ (เอกสารใหม่กว่านี้ดูเหมือนจะเน้นไปที่การคำนวณแบบ 3 มิติ)


ฉันมีรหัสที่ใช้งานได้ใช้ Delaunay ฉันถามจริงๆว่ามีวิธีอื่นไหม
sje397

1
@ sje397 ก่อนอื่น Delaunay เพียงประมาณแก้ปัญหาดังนั้นด้วยเหตุผลเพียงอย่างเดียวมันก็คุ้มค่าที่จะค้นคว้าโค้ดที่ดีกว่า ประการที่สองมีวิธีอื่นแน่นอน ฉันสามารถสรุปคร่าว ๆ ได้สองข้อ: (1) ค้นหา MAT โดยใช้บัฟเฟอร์ภายในและ (2) ทำการวิเคราะห์ภูมิประเทศบนตารางระยะทางแบบยุคลิดของโพลีน ฉันไม่ได้พูดถึงอย่างใดอย่างหนึ่งเพราะทั้งสองมีประสิทธิภาพมากขึ้นและให้ผลลัพธ์ที่ไม่ดี อาจเป็นไปได้ว่าวิธีที่สองนั้นตอบสนองต่อการแก้ปัญหาแบบไดนามิกที่รวดเร็วพอสมควร
whuber

4

มันอาจคุ้มค่าที่จะดูว่า "รูปหลายเหลี่ยมโครงกระดูก"

มีบางตัวอย่างซอร์ส C ++ ที่http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/Chapter_main.html


ขอบคุณ underdark ฉันจะดูเพิ่มเติมเกี่ยวกับ CGAL แต่ความต้องการในการคำนวณใหม่นั้นไม่แพงเมื่อข้อมูลแผนที่ของฉันเปลี่ยนไปนั้นยาก
sje397

CGAL ค่อนข้างเร็ว - การคำนวณแบบทันทีควรเป็นไปได้ มิฉะนั้นคุณสามารถดูที่เรียกว่า 'โครงสร้างข้อมูล kinetic': cgal.org/Manual/3.3/doc_html/cgal_manual/ …
julien

"โครงกระดูก" เป็นคำศัพท์อีกคำสำหรับ MAT การค้นหา "การแปลงแกนกลาง" ได้รับความนิยมมากกว่าและดีกว่าการค้นหา "โครงกระดูก" ในประสบการณ์ของฉัน
whuber

"Skeleton" ดูเหมือนทั่วไปมากขึ้น - MAT เป็นอัลกอริธึมเฉพาะสำหรับโครงกระดูกใช่มั้ย ไม่ว่าจะเป็นหัวข้อใด ... !
julien

ใบอนุญาต CGAL ดูมีข้อ จำกัด (ราคาแพง - เป็นซอฟต์แวร์เชิงพาณิชย์)
sje397
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.