Как линия может быть представлена с помощью Boost Geometry?
Мне не нужен конечный сегмент, но мне нужны бесконечные линии (может быть, сегмент или же LINESTRING можно продлить?)
Как я понимаю, я могу использовать boost::geometry::intersects
, но я не знаю, как определить бесконечную линию.
Если вы хотите проверить, бесконечная ли линия 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
,
Других решений пока нет …