Хороша бібліотека геометрії в python? [зачинено]


97

Я шукаю гарну і добре розвинену бібліотеку для геометричних маніпуляцій та оцінок в python, як-от:

  • оцінити перетин між двома лініями у 2D та 3D (якщо вони є)
  • оцінити точку перетину між площиною та лінією, або лінію перетину між двома площинами
  • оцінити мінімальну відстань між прямою та точкою
  • знайти ортонормальне до площини, що проходить через точку
  • обертати, перекладати, дзеркало набір точок
  • знайти двогранний кут, визначений чотирма точками

У мене є книга збірника для всіх цих операцій, і я міг би її здійснити, але, на жаль, у мене немає часу, тому я б насолоджувався бібліотекою, яка це робить. Більшість операцій корисні для ігрових цілей, тому я впевнений, що деякі з цих функцій можна знайти в ігрових бібліотеках, але я вважаю за краще не включати в мене функції (наприклад, графічні), які мені не потрібні.

Будь-які пропозиції ? Дякую


Якщо у вас добре тільки 2D, ви можете перевірити це .
Пітікос

Відповіді:


35

Можливо, погляньте на SymPy .


2
Це не дуже відповідає моїм вимогам, але це справді класний проект, тому я приймаю вашу відповідь як цікаву пропозицію і для майбутнього (оскільки SymPy має модуль геометрії та величезну кількість розробників)
Стефано Борині

1
2d тільки сумно. Насправді не конструктивний двигун геометрії.
meawoppl

3
Модуль геометрії SymPy також може бути дуже, дуже повільним. Оскільки він призначений для символічної математики, він вважає за краще використовувати точні вирази над приблизними значеннями плаваючої точки. Враховуючи кількість квадратних коренів, які зазвичай беруть участь у геометричних обчисленнях, ви можете уявити, як ці вирази стають дійсно великими і дуже повільними.
dusktreader

3
Оновлення до SymPy тепер містить і тривимірні бібліотеки
control_fd

Дякую за цю відповідь. Я зараз пробую SymPy. Перший експеримент здавався досить повільним - навіть для простого 2D-об'єкта. Будь-яка ідея, чи добре це для обробки геометрії в режимі реального часу? Дякую.
Білл

27

Shapely - це приємна обгортка пітона навколо популярної бібліотеки GEOS .


6
Здається, дуже зосереджена на обробці даних ГІС, а не на чистому "математичному геометрії" (так би мовити)
Стефано Боріні

2
Він, безумовно, створений для використання GIS-спільнотою, однак свідомо не знає географічних проекцій, що робить його чудовим для використання в якості бібліотеки евклідової геометрії загального призначення. Я дуже активно його використовую в проекті комп'ютерних ігор, що зароджується, і він чудово працює.
Джонатан Хартлі

15
що йдеться про 3D-геометрії: "Третє значення z координати z може використовуватися при побудові екземплярів, але не впливає на геометричний аналіз. Усі операції виконуються в площині xy."
sebpiq

3
Наведений вище коментар знадобився мені приблизно півгодини кодування, щоб дізнатися це. Досить агітуючи насправді.
meawoppl

2
Чому лише один голос, коли питання спеціально задає 3D?
Джеймі Булл

14

Я виявив, що п’єклід є чудовим простим математичним пакетом загального призначення. Хоча бібліотека може не містити саме тих проблем, про які ви згадали, її інфраструктура є досить хорошою, щоб було легко написати їх самостійно.


10

3
Останній реліз був 2009 року, і вони видаються неповними. Чи може хтось сказати, що останнім часом вони їх використовували, і що вони можуть робити те, що задається у запитанні, використовуючи прив'язки?
BenjaminGolder

Так, усі прив’язки, які я знайшов, є неповними, включаючи деякі справжні вигоди, такі як конструктивна суцільна геометрія. Крім того, дуже шаблонний характер CGAL ускладнює добре обгортання. У власному проекті ( Demakein ) я використовую модуль cffi та деякі жахливі хаки для використання CGAL безпосередньо з python, використовуючи вбудовані фрагменти C ++.
Пол Гаррісон


6

Я дуже хочу відповісти на це запитання, і ті, що були вище, залишили мене незадоволеним. Однак я щойно натрапив на pythonocc, який виглядає чудово, окрім того, що не вистачає хороших документів і все ще виникають проблеми з установкою (ще не сумісні з pypi). Останнє оновлення було 4 дні тому (19 червня 2011 р.). Він обгортає OpenCascade, який має тону геометрії та функціональності моделювання. З веб-сайту pythonocc:

pythonOCC - це програма розвитку 3D CAD / CAE / PLM для мови програмування Python. Він забезпечує такі функції, як вдосконалені топологічні та геометричні операції, обмін даними (STEP, IGES, STL імпорт / експорт), 2D та 3D зчеплення, жорстке моделювання корпусу, параметричне моделювання.

[EDIT: Зараз я завантажив pythonocc і почав працювати через деякі приклади]

Я вважаю, що він може виконувати всі згадані завдання, але я вважав це неінтуїтивним у використанні. Він створений майже повністю з обгортки SWIG, і як результат, самоаналіз команд стає важким.


На мій погляд, це робить занадто багато ... чи варто починати його? Мені незабаром знадобляться багато операцій з геометрії в моєму Raytracer, і, мабуть, має сенс створити для цього окремий github. У мене вже є якийсь код, ми не починаємо з нуля, але це буде легко переробити, якщо ми виявимо, що це недостатньо добре.
Стефано Боріні

@ Стефано Боріні: точно! Я був би радий допомогти, як можу, але я не наблизився до вашого рівня кваліфікації.
BenjaminGolder

Я так само розчарований наявним. Для простого матеріалу я зробив власний код (наприклад, в Адольфу ), але сьогодні ввечері, наприклад, мені потрібно перетинок багатогранника і багатогранника, і це просто занадто багато кроків від того, що я повинен бути здоровим. У будь-якому випадку, якщо це піде вперед, порахуйте мене.
ezod

цей проект народився?
Мермоз,

1
@Mermoz так, але дуже повільно. Стефано вже зробив початок у бібліотеці, і я писав власні доповнення, але ми не зайшли дуже далеко. дивіться github.com/stefanoborini/python-geometry and github.com/bengolder/python-geometry
BenjaminGolder

2

Вас може зацікавити модуль Python SpaceFuncs від проекту OpenOpt, http://openopt.org

SpaceFuncs - це інструмент для 2D, 3D, N-мірного геометричного моделювання з можливостями параметризованих обчислень, чисельної оптимізації та рішення систем геометричних рівнянь


2

Python Wild Magic - це ще один SWIG-код із загорнутим кодом. Однак це ігрова бібліотека, але ви можете маніпулювати файлом бібліотеки SWIG, щоб виключити будь-які небажані графічні матеріали з API Python.

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