Нахождение пересечений между отрезком линии и общим многоугольником в 2D / 3D - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь использовать привязки Python CGAL для написания программы (на Python) для поиска пересечений между 1 объектом (который может быть отрезком (линиями) или многоугольником / многогранником) и другим многоугольником / многогранником.Пока я работаю в 2D, я бы хотел расширить программу и до 3D.

Я уже установил привязки к python для CGAL.Я понимаю, что он все еще находится в стадии разработки, но, похоже, он уже может многое сделать.Мне удалось получить его для вывода пересечений между отрезком линии и тетраэдром (используя алгоритмы дерева AABB) и пересекающихся последовательностей изо-ориентированных блоков dD.Однако алгоритмы дерева AABB, похоже, работают только с трехмерными объектами.Я предполагаю, что могу представить свою общую форму как псевдо-3D-объект, но затем я столкнулся с проблемой фактического построения 3D-объекта.Примеры, приведенные в привязках к python, работают только для тетраэдров, и я не могу понять, как создать общий многогранник.Таким образом, моя проблема стала двоякой:

  1. Как определить общий многогранник, используя привязки Python CGAL?
  2. Как использовать определенный многогранник для вычисления пересечений и расстоянийиз других общих форм, таких как отрезки и многоугольники?

Итак, для тетраэдра пакет делает (из https://github.com/CGAL/cgal-swig-bindings/blob/master/examples/python/AABB_polyhedron_facet_intersection_example.py):

from CGAL.CGAL_Kernel import Point_3
from CGAL.CGAL_Polyhedron_3 import Polyhedron_3

p=Point_3(1.0, 0.0, 0.0)
q=Point_3(0.0, 1.0, 0.0)
r=Point_3(0.0, 0.0, 1.0)
s=Point_3(0.0, 0.0, 0.0)
polyhedron = Polyhedron_3()
polyhedron.make_tetrahedron(p, q, r, s)

#constructs AABB tree
tree = AABB_tree_Polyhedron_3_Facet_handle(polyhedron.facets())

#constructs segment query
a = Point_3(-0.2, 0.2, -0.2)
b = Point_3(1.3, 0.2, 1.3)
segment_query=Segment_3(a,b)

Это создает тетраэдр,который может поддерживать запросы на пересечение, квадрат расстояния и т. д. Однако это не работает для более чем 4 точек. В моем случае, полигон / многогранник будет определяться примерно в 50 точках. Как создать такой объект с помощью CGAL-python

...