2015-12-07 3 views
2

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

мне не нужен конечный отрезок, но мне нужно бесконечные линии (возможно Segment или Linestring может быть продлен?)

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

+2

Boost.Geometry не имеет интуитивной концепции Line или Ray. – Vertexwahn

+0

@Vertexwahn нет способа сделать пересечение линии в Boost? – mrgloom

+0

Не для бесконечных линий до сих пор ... – Vertexwahn

ответ

0

Если вы хотите проверить, пересекает ли бесконечная линия 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.

Смежные вопросы