[英]Lines intersection using Boost Geometry
如果要測試無限線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
為真。 否則,如果端點位於A
兩側,則intersects
為真。
也許它會有所幫助,函數intersection_point計算兩條無限長線的交點。 https://www.boost.org/doc/libs/1_72_0/boost/geometry/geometries/infinite_line.hpp https://www.boost.org/doc/libs/1_72_0/boost/geometry/arithmetic/infinite_line_functions.hpp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.