簡體   English   中英

使用 Boost Geometry 的線相交

[英]Lines intersection using Boost Geometry

如何使用 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類型簡單地使用作為該線一部分的線段來表示線,但作為單獨的類型,因此可以通過類型系統將其與線段區分開,以實現重載。

它首先查詢其上的側A兩個端點( firstsecond )的B謊言。 然后,如果firstSidesecondSide中的任何一個為零,這意味着相應的端點正在接觸A ,因此intersects為真。 否則,如果端點位於A兩側,則intersects為真。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM