Як обчислити прямі скелети за допомогою Python?


12

Чи існує пакет Python, який забезпечує реалізацію алгоритму Прямий скелет?

Я знаю, що проект CGAL з відкритим кодом (C ++) містить реалізацію, але, схоже, cgal-прив'язки не включають цей пакет CGAL .

У будь-якому випадку я віддаю перевагу чистій реалізації Python, яку я міг би змінити / розширити відповідно до моїх потреб.

У той час як реалізація, яка може обробляти багатокутники з отворами, була б кращою, це не є строго необхідним.


1
Ви протестували pySkeleton чи Skeletron ?
Фарид Черагі

Я спробував pySkeleton. Програма GUI не працювала для мене, і я ще не знайшов часу, щоб перевірити, чи
підлягає коригуванню

імпорт вершин багатокутника = [(0,0), (0,5), (5,5), (5,0)] ребра = [(0,1), (1,2), (2,3), (3,0)] p = полігон. Полігон (вершини, краї) скелет_graph = p.straight_skeleton () __________________________________________________ Під час виконання вище я отримав таку помилку: _________ Traceback (останній дзвінок останній): Файл "C: \ pySkeleton \ pySkeleton \ test.py ", рядок 6, в <module> p = polygon. Полігон (вершини, краї) Файл" C: \ pySkeleton \ pySkeleton \ polygon.py ", рядок 44, init self.vertices = map (Точка, вершини) TypeError: __init __ () бере рівно 3 аргументи (2 дані)
ramesh

Відповіді:


6

Можливо, ви можете змінити pySkeleton від Olivier Teboul відповідно до ваших потреб.

У мене не було можливості подивитися власне код, але з того, що він каже, це повинен бути чистий Python .


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

Ви отримуєте графічний об’єкт із вузлами та дугами, до якого ви можете отримати доступ, просто:

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 нездійсненно повільний. Крім того, я отримую дивні результати для деяких полігонів. Я припускаю, що це працює не правильно у всіх випадках.

Тим не менш, велика подяка Олів'є Тебулу за цю бібліотеку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.