如何使用Boost Geometry表示直线?
我不需要有限段,但我需要无限行(也许Segment或Linestring可以扩展?)
据我所知,我可以使用boost::geometry::intersects,但我不知道如何定义无限直线。
发布于 2017-10-02 01:42:16
如果要测试无限长线段是否与线段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为真。否则,如果端点位于A的相反两端,则intersects为真。
https://stackoverflow.com/questions/34133160
复制相似问题