Пересечения в пространстве

В этом разделе представлены различные варианты пересечения в пространстве.

• Определение факта пересечения точки и шара:

bool isIntersect ( const Vector3d & p, const Sphere3d & fig );
• Пересечения плоскостей, прямых и отрезков:
Def<Line3d>   intersection ( const Plane3d & plane1, const Plane3d & plane2 );
Def<Vector3d> intersection ( const Plane3d & plane1, const Plane3d & plane2, const Plane3d & plane3 );
Def<Vector3d> intersection ( const Plane3d & plane, const Line3d & line );
Def<Vector3d> intersection ( const Plane3d & plane, const Segment3d & seg );
• Функция cut отсекает заданной плоскостью часть отрезка находящуюся в положительном полупространстве. Если там находятся оба конца отрезка, то функция возвращает неопределённый отрезок:
Def<Segment3d> cut ( const Plane3d & plane, const Segment3d & seg );

• Пересечения прямых и отрезков с шаром:

Def<Segment3d> intersection ( const Line3d & line, const Sphere3d & sphere );
Def<Segment3d> intersection ( const Segment3d & seg, const Sphere3d & sphere );

• Пересечения прямых и отрезков с эллипсоидом:

Def<Segment3d> intersection ( const Line3d & line, const Ellipsoid3d & e );
Def<Segment3d> intersection ( const Segment3d & seg, const Ellipsoid3d & e );

• Пересечение многогранника и плоскости:

bool intersection ( const Polyhedron & poly, const Plane3d & plane, DynArrRef<DynArray<Vector3d> > & res );
В результате будет получено множество ( возможно пустое ) многоугольников в пространстве.

• Функция cut отсекает данной плоскостью часть многогранника или, другими словами, находит пересечение многогранника и отрицательного полупространства, заданного плоскостью:

bool cut ( const Polyhedron & poly, const Plane3d & plane, Polyhedron & res, int info = 0 );
Ссылки poly и res должны ссылаться на разные объекты. Новые грани помечаются значением параметра info.

• Пересечение выпуклого многогранника с произвольным:

bool intersect1c ( const Polyhedron & conv, const Polyhedron & poly, Polyhedron & res );
Здесь ссылка res может ссылаться на объект conv или poly.

• Пересечение множества полупространств содержащих центр координат. Результатом будет выпуклый многогранник:

bool intersectHalfSpaces ( CCArrRef<Plane3d> & plane, Polyhedron & poly );
В случае обнаружения ошибки в ходе выполнения функция возвращает значение false.

Описание класса Vector3d находится здесь.
Описание класса Polyhedron находится здесь
Описание шаблона классов Def находится здесь.
Описание шаблона классов DynArrRef и DynArray находится здесь.
Описание классов Segment3d, Line3d, Plane3d, Sphere3d и Ellipsoid3d находится здесь.

Исходники алгоритмов находятся в файле intersect3d.cpp.

В приложении DEMO можно посмотреть на результаты некоторых пересечений.

Наверх