Хорошая библиотека геометрии на Python? [закрыто]


97

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

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

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

Какие-либо предложения ? Спасибо


Если все в порядке только с 2D , то вы можете проверить это .
Pithikos,

Ответы:


36

Возможно, взгляните на SymPy .


2
Он не совсем удовлетворяет моим требованиям, но это действительно классный проект, поэтому я принимаю ваш ответ как интересное предложение и на будущее (поскольку у SymPy есть модуль геометрии и огромное количество разработчиков)
Стефано Борини,

1
2д только грустно. Не совсем конструктивная геометрия двигателя.
meawoppl

3
Модуль геометрии SymPy также может работать очень и очень медленно. Поскольку он разработан для символьных математических вычислений, он предпочитает использовать точные выражения, а не приблизительные значения с плавающей запятой. Учитывая количество квадратных корней, которые обычно используются в геометрических вычислениях, вы можете представить, как эти выражения становятся действительно большими и очень медленными.
dusktreader

3
Обновление для SymPy теперь также содержит 3D-библиотеки
control_fd 09

Спасибо за этот ответ. Я сейчас пробую SymPy. Первый эксперимент казался довольно медленным - даже для простого 2D-объекта. Есть идеи, подходит ли это для обработки геометрии в реальном времени? Спасибо.
Билл,

27

Shapely - это хорошая оболочка на Python для популярной библиотеки GEOS .


6
Похоже, он очень сосредоточен на обработке данных ГИС, а не на чистой «математической геометрии» (так сказать)
Стефано Борини

2
Он определенно был создан для использования сообществом ГИС, однако он намеренно игнорирует географические проекции, что делает его подходящим для использования в качестве универсальной библиотеки евклидовой геометрии. Я часто использую его как таковой в зарождающемся проекте компьютерной игры, и он отлично работает.
Джонатан Хартли,

15
что в нем говорится о трехмерной геометрии: «Третье значение координаты z можно использовать при построении экземпляров, но оно не влияет на геометрический анализ. Все операции выполняются в плоскости xy».
sebpiq

4
На приведенный выше комментарий у меня ушло около получаса программирования. Довольно волнующе.
meawoppl

2
Почему только один голос против, когда вопрос касается конкретно 3D?
Джейми Булл

14

Я обнаружил, что pyeuclid - отличный простой математический пакет общего назначения. Хотя библиотека может не содержать именно тех проблем, о которых вы упомянули, ее инфраструктура достаточно хороша, чтобы можно было легко написать их самостоятельно.


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 сеток, моделирование твердого тела, параметрическое моделирование.

[РЕДАКТИРОВАТЬ: я загрузил pythonocc и начал работать с некоторыми примерами]

Я считаю, что он может выполнять все упомянутые задачи, но я нашел его не интуитивно понятным в использовании. Он почти полностью создан из оберток SWIG, и в результате самоанализ команд становится затруднительным.


На мой взгляд, это слишком много .... стоит ли начинать? Скоро мне понадобится много геометрических операций в моем трассировщике лучей, и, вероятно, имеет смысл создать для него отдельный github. У меня уже есть код, мы не начинаем с нуля, но его будет легко переделать, если мы обнаружим, что он недостаточно хорош.
Стефано Борини

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

Я так же разочарован тем, что доступно. Для простых вещей я написал свой собственный код (например, в Adolphus ), но сегодня, например, мне нужно пересечение многогранника и многогранника, а это слишком много шагов от того, что я должен быть в здравом уме. В любом случае, если это будет продолжаться,
посчитайте

неужели этот проект родился?
Mermoz

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

2

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

SpaceFuncs - это инструмент для 2D, 3D, N-мерного геометрического моделирования с возможностями параметризованных вычислений, численной оптимизации и решения систем геометрических уравнений.


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.