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

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

Первая функция определяет пересекаются ли точка и шар:

bool isIntersect ( const Vector3d & p, const Sphere3d & fig );
Следующие функции находят точку пересечения плоскостей, прямых и отрезков, если она единственная:
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 );
Следующая функция находит пересечение двух плоскостей:
Def<Line3d> intersection ( const Plane3d & plane1, const Plane3d & plane2 );
Функция 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.

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

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

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

Наверх
Hosted by uCoz