Трехмерная геометрическая топология (например, пересечение) в Python

Я использую GEOS (в Python/Django) для манипулировать некоторыми 3D-элементами. Все топологические операции отлично работают в 2D. Итак, я создал простой MultiPolygon с 3D-полигонами (на самом деле очень простой, это просто набор вертикальных плоскостей) и LineString, который также является 3D. Теперь я просто хотел, чтобы их пересечение (которое, я считаю, было бы списком 3D-точек):

>>> l = LineString([0, 0, 0], [1, 1, 1])
>>> p = Polygon([[1, 0, 0], [0, 1, 0], [0, 1, 1000], [1, 0, 1000], [1, 0, 0]])
>>> p.intersects(l)
False

Итак, геос не поддерживает топологические операции с 3D-данными ... Ну, должно быть много библиотек, которые могут сделать это для меня, верно ??? Так что я гуглил, и я просто не могу найти ни одного !!! Так что, если у кого-то есть указатель, это было бы здорово...

ИЗМЕНИТЬ

Существует аналогичный вопрос, как пересечения трехмерных полигонов в python, но это не не дают удовлетворительного ответа (см. комментарий).


person sebpiq    schedule 18.02.2012    source источник
comment
возможный дубликат пересечения трехмерных полигонов в python   -  person plaes    schedule 18.02.2012
comment
@plaes: За исключением того, что у [Пересечения трехмерных полигонов в питоне] нет хорошего ответа. Они предлагают использовать pvtrace, который трассирует некоторые лучи: напомню, что я использую MultiPolygons и LineString: будет очень неэффективно перебирать все полигоны, все сегменты линии и вычислять сегмент полигона INTER для каждого из них.   -  person sebpiq    schedule 18.02.2012
comment
кроме того, просто зайдите на сайт pvtrace и найдите документ, а затем скажите мне, хотите ли вы его использовать...   -  person sebpiq    schedule 18.02.2012
comment
Ну, скажи сначала, каким должен быть результат пересечения 3D-объекта и линии?   -  person plaes    schedule 18.02.2012
comment
Набор 3D-точек и 3D-линий. Это тест?   -  person sebpiq    schedule 18.02.2012
comment
Да, хотя закрытие проблемы было моей ошибкой (просто пытался помочь сохранить чистоту).   -  person plaes    schedule 20.02.2012


Ответы (1)


Я до сих пор не верю, что существует единственный «хороший выбор» библиотеки для выполнения этого на python, но ряд многообещающих проектов находится в разработке, в первую очередь улучшенный cgal-bindings в коде Google.

Новые условия лицензирования CGAL, начиная с версии 4 (GPL/LGPL), также делают некоторые части исходного вопрос по этой теме устарел.

person Andrew Walker    schedule 18.02.2012