2016-10-08 53 views
1

我試圖用Boost.Geometry圖書館找方和線的交點的第二點,Boost.Geometry沒有找到多邊形線intersecion

model::ring<model::d2::point_xy<double>> ring { {0, 0}, {2, 0}, {2, 2}, {0, 2} }; 
model::polygon<model::d2::point_xy<double>> pol; 
pol.inners().push_back (ring); 

model::linestring<model::d2::point_xy<double>> line { {1, 3}, {-1, -1} }; 

model::multi_point<model::d2::point_xy<double>> out; 

intersection (pol, line, out); //out returns only {0.5, 2}, but not {0, 1} 

但它返回只有一個點, althougt居然有交集

enter image description here

我怎樣才能找到交集的所有點的兩個點?

回答

2

閉上你的戒指,並把它按預期的順序(默認爲順時針,see default template parameters):

model::ring<model::d2::point_xy<double>> ring { 
    {0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0} 
}; 

戒指是無效的,即不是fullfilling指定模板參數的要求。

As per documentation (see under rules)使用一個無效的幾何作爲輸入可能會給出錯誤的結果,並且有效性既沒有被算法校驗也沒有被校正。

戒指在施工或第一次使用之前也不會自動關閉(它應該如何知道你不會追加更多分數?)。 Here是一個重複關閉點的示例結構。

然而有is_validcorrect來解決這個問題。

您也可能想要將點指向外環,即pol.outer()。你的多邊形需要有一個外部環,內部環決定了孔。你可以直接構造沒有內環的多邊形:

model::polygon<model::d2::point_xy<double>> pol { 
    { {0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0} } 
}; 
+1

謝謝,這是工程。但環已經有參數閉合,這是默認情況下,我認爲這只是針對這些情況。是否被交集算法忽略? – user3514538