#cgal
#cgal
Вопрос:
Допустим, у нас есть набор треугольников 1,2, …, N и отрезок линии. Создавая дерево, я хочу получить пересечение отрезка линии с треугольниками и индекс треугольника, который пересекает отрезок линии (есть только один). Как я вызываю это из «пересечения» ниже?
Спасибо.
for (int i=0; i<NumTriangles; i ) {
Point a(Triangles[i].vert1[0], Triangles[i].vert1[1], Triangles[i].vert1[2]);
Point b(Triangles[i].vert2[0], Triangles[i].vert2[1], Triangles[i].vert2[2]);
Point c(Triangles[i].vert3[0], Triangles[i].vert3[1], Triangles[i].vert3[2]);
triangles.push_back(Triangle(a,b,c));
}
Tree tree(triangles.begin(),triangles.end());
Point a(0,0,0);
Point a(0,0,1);
Segment segment_query(a,b);
Segment_intersection intersection = tree.any_intersection(segment_query);
Ответ №1:
Каждый треугольник, который вы помещаете в три, называется примитивом. Этот примитив имеет уникальный идентификатор (также известный как ID) и геометрию (datum, здесь треугольник).
Тип идентификатора примитива определяется параметром шаблона класса CGAL::AABB_primitive
. Если вы используете CGAL::AABB_triangle_primitive
, который является просто упрощенным API CGAL:AABB_primitive
, то идентификатор является итератором, ссылающимся на примитив в пределах диапазона triangles
.
Функция any_intersection()
возвращает необязательный объект, представляющий собой пару, содержащую как геометрию пересечения (as first
), так и пересекаемый примитив (as second
), из которого вы можете получить идентификатор с id()
помощью функции.