• Определение факта пересечения точки и многоугольника. Направление обхода вершин многоугольника может быть произвольным. Для определения применяется метод луча: bool isIntersect ( const Vector2d & p, CArrRef<Vector2d> poly ); • Определение факта пересечения точки и круга: bool isIntersect ( const Vector2d & p, const Circle2d & fig ); • Точка пересечения прямых и отрезков, если она единственная: Def<Vector2d> intersection ( const Line2d & line1, const Line2d & line2 ); Def<Vector2d> intersection ( const Line2d & line, const Segment2d & seg ); Def<Vector2d> intersection ( const Segment2d & s1, const Segment2d & s2 );• Функция cut отсекает заданной прямой часть отрезка находящуюся в положительной полуплоскости ( или другими словами находит пересечение отрезка с отрицательной полуплоскостью ). Если в положительной полуплоскости находятся оба конца отрезка, то функция возвращает неопределённый отрезок: Def<Segment2d> cut ( const Line2d & line, const Segment2d & seg ); • Пересечение прямых и отрезков с кругом. Результатом пересечения будет отрезок, возможно неопределённый: Def<Segment2d> intersection ( const Line2d & line, const Circle2d & cir ); Def<Segment2d> intersection ( const Segment2d & seg, const Circle2d & cir ); • Пересечение прямых и отрезков с эллипсом: Def<Segment2d> intersection ( const Line2d & line, const Ellipse2d & e ); Def<Segment2d> intersection ( const Segment2d & seg, const Ellipse2d & e ); • Пересечение прямых и отрезков с многоугольником. Обход вершин многоугольника может быть произвольным. Результатом пересечения будет массив отрезков, возможно пустой: DynArrRef<Segment2d> & intersection ( const Line2d & line, CArrRef<Vector2d> poly, DynArrRef<Segment2d> & res ); SuiteRef<Segment2d> & intersection ( const Segment2d & seg, CArrRef<Vector2d> poly, SuiteRef<Segment2d> & res ); • Следующая функция отсекает прямой часть многоугольника находящуюся в положительной полуплоскости. Обход вершин многоугольника может быть произвольным. Результатом пересечения будет массив многоугольников, возможно пустой: SuiteRef<Suite<Vector2d>> & cut ( CArrRef<Vector2d> poly, const Line2d & line, SuiteRef< Suite<Vector2d> > & res ); • Пересечение выпуклого многоугольника с простым многоугольником. Обход вершин многоугольников должен быть против часовой стрелки. По сторонам выпуклого многоугольника строятся прямые, которые по очереди отсекают части от второго многоугольника. В результате получаем массив многоугольников, возможно пустой: Suite<Suite<Vector2d>> & intersect1c ( CArrRef<Vector2d> conv, CArrRef<Vector2d> poly, Suite< Suite<Vector2d> > & res ); • Пересечение двух простых многоугольников. Обход вершин многоугольников должен быть против часовой стрелки. В результате получаем массив многоугольников, возможно пустой: bool intersection ( CCArrRef<Vector2d> & poly1, CCArrRef<Vector2d> & poly2, Suite< Suite<Vector2d> > & res );В случае обнаружения ошибки в ходе выполнения функция возвращает значение false. • Пересечение множества полуплоскостей содержащих центр координат. Результатом будет выпуклый многоугольник: bool intersectHalfPlanes ( CCArrRef<Line2d> & line, DynArrRef<Vector2d> & poly );В случае обнаружения ошибки в ходе выполнения функция возвращает значение false. Описание шаблонов классов CArrRef, DynArrRef, SuiteRef и Suite находится здесь.
|