首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Boost Geometry进行直线相交

使用Boost Geometry进行直线相交
EN

Stack Overflow用户
提问于 2015-12-07 20:05:08
回答 1查看 928关注 0票数 3

如何使用Boost Geometry表示直线?

我不需要有限段,但我需要无限行(也许SegmentLinestring可以扩展?)

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-02 01:42:16

如果要测试无限长线段是否与线段B相交,可使用boost::geometry::strategy::side::side_by_triangle进行测试

代码语言:javascript
复制
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的两个端点(firstsecond)位于B的哪一侧。然后,如果firstSidesecondSide中的任何一个为零,这意味着相应的端点正在接触A,因此intersects为真。否则,如果端点位于A的相反两端,则intersects为真。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34133160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档