3

如何使用 Boost Geometry 表示线?

我不需要有限段,但我需要无限线(也许可以扩展或线串?)

据我了解,我可以使用boost::geometry::intersects,但我不知道如何定义无限线。

4

1 回答 1

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类型仅使用属于该行的一部分的段来表示一行,但作为单独的类型,因此可以通过类型系统将其与段区分开来,以实现重载。

它首先查询lieA的两个端点 (firstsecond) 的哪一侧。B然后,如果firstSidesecondSide中的任何一个为零,这意味着相应的端点是接触的A,所以intersects是真的。否则,intersects如果端点在 的对边,则为真A

于 2017-10-01T17:42:15.723 回答