В этом разделе представлены различные варианты пересечения в пространстве. • Определение факта пересечения точки и шара: 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 находится здесь.
В приложении DEMO можно посмотреть на результаты некоторых пересечений. Наверх |