Bagaimana cara menghitung Tengkorak Lurus menggunakan Python?

12

Apakah ada paket Python yang menyediakan implementasi algoritma Straight Skeleton?

Saya sadar bahwa proyek open source (C ++) CGAL mengandung implementasi tetapi sepertinya cgal-bindings tidak termasuk paket CGAL ini .

Dalam kasus apa pun, saya lebih suka implementasi Python murni yang dapat saya modifikasi / perluas sesuai dengan kebutuhan saya.

Meskipun implementasi yang dapat menangani poligon dengan lubang lebih disukai, itu tidak sepenuhnya diperlukan.

underdark
sumber
1
Sudahkah Anda menguji pySkeleton atau Skeletron ?
Farid Cheraghi
Saya mencoba pySkeleton. Aplikasi GUI tidak bekerja untuk saya dan saya belum menemukan waktu untuk memeriksa apakah kode tersebut dapat diselamatkan
underdark
impor simpul poligon = [(0,0), (0,5), (5,5), (5,0)] edge = [(0,1), (1,2), (2,3), (3,0)] p = polygon.Polygon (simpul, tepi) skeleton_graph = p.stAPAN_skeleton () __________________________________________________ Saat menjalankan di atas saya mendapat kesalahan berikut: _________ Traceback (panggilan terakhir terakhir): File "C: \ pySkeleton \ pySkeleton \ test.py ", baris 6, dalam <module> p = polygon.Polygon (simpul, tepi) File" C: \ pySkeleton \ pySkeleton \ pygon.py ", baris 44, di init self.vertices = peta (Poin, vertices) TypeError: __init __ () mengambil tepat 3 argumen (2 diberikan)
ramesh

Jawaban:

6

Mungkin Anda dapat memodifikasi pySkeleton oleh Olivier Teboul sesuai dengan kebutuhan Anda.

Saya belum memiliki kesempatan untuk melihat kode yang sebenarnya tetapi dari apa yang dia katakan itu harus Python murni .

Kersten
sumber
3

Anda dapat menggunakan pySkeleton sebagai berikut:

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()

Anda mendapatkan Graph-Object dengan Nodes dan Arcs, yang dapat Anda akses hanya dengan:

nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs

Seperti dikatakan dalam readme.txt pySkeleton, simpul poligon harus dalam urutan searah jarum jam. Untuk lubang dalam poligon, simpul harus berlawanan arah dengan jarum jam.

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

Catatan: Untuk poligon yang lebih kompleks dengan 100+ simpul dan tepi, pySkeleton lambat sekali. Selain itu saya menerima hasil yang aneh untuk beberapa poligon. Saya berasumsi bahwa itu tidak berfungsi dengan benar dalam semua kasus.

Meskipun demikian, terima kasih banyak kepada Olivier Teboul untuk perpustakaan ini.

poechtma
sumber