Пересечение линий с использованием Boost Geometry

Как линия может быть представлена ​​с помощью Boost Geometry?

Мне не нужен конечный сегмент, но мне нужны бесконечные линии (может быть, сегмент или же LINESTRING можно продлить?)

Как я понимаю, я могу использовать boost::geometry::intersects, но я не знаю, как определить бесконечную линию.

3

Решение

Если вы хотите проверить, бесконечная ли линия A пересекает отрезок Bэто можно сделать используя boost::geometry::strategy::side::side_by_triangle:

template <typename Point>
struct line
{
boost::geometry::model::segment<Point> segment;
};

template <typename Point>
bool intersects(line<Point> const& A, boost::geometry::model::segment<Point> const& B)
{
using side = boost::geometry::strategy::side::side_by_triangle<>;
auto const firstSide  = side::apply(A.segment.first, A.segment.second, B.first);
auto const secondSide = side::apply(A.segment.first, A.segment.second, B.second);
return firstSide == 0 || secondSide == 0 || (firstSide < 0) != (secondSide < 0);
}

line Тип просто представляет строку, используя сегмент, который является частью этой линии, но в качестве отдельного типа, поэтому его можно отличить от сегмента системой типов в целях перегрузки.

Сначала запрашивает, на какой стороне A две конечные точки (first а также second) из B ложь. Затем, если любой из firstSide или же secondSide равны нулю, это означает, что соответствующая конечная точка касается A, так intersects правда. Иначе, intersects верно, если конечные точки находятся на противоположных сторонах A,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]