Python kullanarak Düz İskeletler nasıl hesaplanır?


12

Düz İskelet algoritmasının uygulanmasını sağlayan bir Python paketi var mı?

Açık kaynak kodlu (C ++) proje CGAL'ın bir uygulama içerdiğinin farkındayım, ancak cgal-bağlamaları bu CGAL paketini içermiyor gibi görünüyor .

Her durumda, ihtiyaçlarıma göre değiştirebileceğim / genişletebileceğim saf bir Python uygulamasını tercih ederim.

Delikli çokgenleri işleyebilen bir uygulama tercih edilirken, kesinlikle gerekli değildir.


1
PySkeleton veya Skeletron'u test ettiniz mi?
Farid Cheraghi

PySkeleton'u denedim. GUI uygulaması benim için çalışmadı ve henüz kod kurtarılabilir olup olmadığını kontrol etmek için zaman bulamadım
underdark

çokgen köşe noktalarını içe aktar = [(0,0), (0,5), (5,5), (5,0)] kenarlar = [(0,1), (1,2), (2,3), (3,0)] p = poligon.Polygon (köşeler, kenarlar) skeleton_graph = p.straight_skeleton () __________________________________________________ Yukarıda yürütülürken şu hatayı aldım: _________ Geri izleme (en son çağrı son): Dosya "C: \ pySkeleton \ pySkeleton \ test.py ", satır 6, <modül> p = çokgende. Çokgen (köşeler, kenarlar) Dosya" C: \ pySkeleton \ pySkeleton \ polygon.py ", satır 44, init self.vertices = map (Nokta, TypeError: __init __ () tam olarak 3 argüman alır (2 tane verilir)
ramesh

Yanıtlar:


6

Belki pySkeleton ile Olivier Teboul'u ihtiyaçlarınıza göre değiştirebilirsiniz.

Gerçek koda bakma şansım olmadı ama söylediklerinden saf Python olmalı .


3

PySkeleton'u aşağıdaki gibi kullanabilirsiniz :

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

Düğümlere ve Yaylara sahip bir Grafik Nesnesi alırsınız;

nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs

PySkeleton readme.txt dosyasında belirtildiği gibi, çokgen köşelerinin saat yönünde olması gerekir. Çokgen içindeki delikler için, köşelerin saat yönünün tersine olması gerekir.

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

Not: 100'den fazla köşesi ve kenarları olan daha karmaşık çokgenler için pySkeleton dayanılmaz derecede yavaştır. Bunun dışında bazı çokgenler için garip sonuçlar alıyorum. Her durumda doğru çalışmadığını varsayıyorum.

Yine de bu kütüphane için Olivier Teboul'a çok teşekkürler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.