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

97

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

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

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

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

Стефано Борини
источник
Если все в порядке только с 2D , то вы можете проверить это .
Pithikos,

Ответы:

36

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

Джон Y
источник
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

CGAL также имеет привязки к Python .

Агнель Куриан
источник
3
Последний выпуск был в 2009 году, и они кажутся неполными. Может ли кто-нибудь сказать, что они использовали их недавно и что они могут делать то, что задано в вопросе, с помощью привязок?
BenjaminGolder
Да, все привязки, которые я нашел, неполны, включая некоторые настоящие полезности, такие как конструктивная сплошная геометрия. Кроме того, из-за того, что CGAL имеет много шаблонов, его трудно обернуть. В моем собственном проекте ( Demakein ) я использую модуль cffi и несколько ужасных уловок для использования CGAL непосредственно из python, используя встроенные фрагменты кода C ++.
Пол Харрисон,
6

geometry-simple имеет классы Point Line Plane Movement в ~ 300 строках, используя только numpy; взглянуть.

Денис
источник
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-мерного геометрического моделирования с возможностями параметризованных вычислений, численной оптимизации и решения систем геометрических уравнений.

user871016
источник
2

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

Велимир Млакер
источник