วิธีการคำนวณ Straight Skeletons โดยใช้ Python


12

มีแพ็คเกจ Python ที่ให้การทำงานของ Straight Skeleton algorithm หรือไม่?

ฉันทราบว่าCGALโครงการโอเพ่นซอร์ส (C ++) ได้รับการนำไปใช้แต่ดูเหมือนว่าการผูกมัดของ cgal จะไม่รวมแพ็คเกจ CGALนี้

ไม่ว่าในกรณีใดฉันต้องการใช้ Python อย่างแท้จริงซึ่งฉันสามารถแก้ไข / ขยายได้ตามความต้องการ

ในขณะที่การใช้งานที่สามารถจัดการรูปหลายเหลี่ยมกับหลุมจะดีกว่าก็ไม่จำเป็นอย่างเคร่งครัด


1
คุณได้ทดสอบ pySkeleton หรือSkeletron แล้วหรือยัง ?
Farid Cheraghi

ฉันลอง pySkeleton แอปพลิเคชัน GUI ไม่ทำงานสำหรับฉันและฉันยังไม่ได้มีเวลาตรวจสอบว่ารหัสสามารถกู้ได้หรือไม่
underdark

นำเข้ารูปหลายเหลี่ยมจุดยอด = [(0,0), (0,5), (5,5), (5,0)] ขอบ = [(0,1), (1,2), (2,3), (3,0)] p = polygon.Polygon (จุดยอด, ขอบ) Skeleton_graph = p.straight_skeleton () __________________________________________________ ขณะดำเนินการข้างต้นฉันพบข้อผิดพลาดต่อไปนี้: _________ Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "C: \ pySkeleton \ pySkeleton \ test.py ", บรรทัด 6, ใน <module> p = polygon.Polygon (จุดยอด, ขอบ) ไฟล์" C: \ pySkeleton \ pySkeleton \ polySkeleton \ polygon.py ", บรรทัด 44, ในinit self.vertices = แผนที่ (จุด, จุด) TypeError: __init __ () ใช้เวลาตรง 3 ข้อโต้แย้ง (2 รับ)
Ramesh

คำตอบ:


6

บางทีคุณสามารถแก้ไขpySkeletonโดย Olivier Teboul เพื่อให้เหมาะกับความต้องการของคุณ

ฉันไม่ได้มีโอกาสที่จะดูรหัสจริง แต่จากสิ่งที่เขาบอกว่ามันควรจะบริสุทธิ์หลาม


3

คุณสามารถใช้pySkeletonดังนี้

from pySkeleton import polygon

vertices = [(0,0), (0,5), (5,5), (5,0)]
edges = [(0,1), (1,2), (2,3), (3,0)]

p = polygon.Polygon(vertices, edges)
skeleton_graph = p.straight_skeleton()

คุณได้รับ Graph-Object พร้อม Nodes และ Arcs ซึ่งคุณสามารถเข้าถึงได้ง่ายๆโดย:

nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs

ดังที่กล่าวไว้ใน pySkeleton readme.txt จุดยอดรูปหลายเหลี่ยมจำเป็นต้องเรียงตามเข็มนาฬิกา สำหรับหลุมภายในรูปหลายเหลี่ยมจุดยอดต้องอยู่ในลำดับทวนเข็มนาฬิกา

vertices = [(25.0, 15.0), (45.0, 15.0), (45.0, 35.0), (25.0, 35.0), # polygon
            (30.0, 20.0), (30.0, 30.0), (40.0, 30.0), (40.0, 20.0)] # hole in polygon

edges = [(0, 1), (1, 2), (2, 3), (3, 0), # polygon
         (4, 5), (5, 6), (6, 7), (7, 4)] # hole in polygon

หมายเหตุ: สำหรับรูปหลายเหลี่ยมที่ซับซ้อนยิ่งขึ้นที่มี 100 จุดยอดและขอบ pySkeleton ช้าอย่างไม่น่าเป็นไปได้ นอกจากนั้นฉันยังได้รับผลแปลก ๆ สำหรับรูปหลายเหลี่ยม ฉันคิดว่ามันไม่ทำงานอย่างถูกต้องในทุกกรณี

อย่างไรก็ตามขอขอบคุณ Olivier Teboul สำหรับห้องสมุดนี้

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