如何使用 Boost Geometry 表示线?
据我了解,我可以使用boost::geometry::intersects
,但我不知道如何定义无限线。
如何使用 Boost Geometry 表示线?
据我了解,我可以使用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
类型仅使用属于该行的一部分的段来表示一行,但作为单独的类型,因此可以通过类型系统将其与段区分开来,以实现重载。
它首先查询lieA
的两个端点 (first
和second
) 的哪一侧。B
然后,如果firstSide
或secondSide
中的任何一个为零,这意味着相应的端点是接触的A
,所以intersects
是真的。否则,intersects
如果端点在 的对边,则为真A
。