0
如何使用CGAL輕鬆檢索兩條相交多邊形的相交線(從第一個交點到最後一個交點)。看到圖像的澄清,綠線是我想要的。使用CGAL獲取多邊形相交線
目前我使用下面的算法,在那裏我得到的交集多邊形,然後發現這是兩個多邊形的邊界點,這應該是交叉點。這裏是代碼:
Polygon_2 P,Q;
Pwh_list_2 intR;
Pwh_list_2::const_iterator it;
CGAL::intersection(P, Q, std::back_inserter(intR));
//Loop through intersection polygons
for (it = intR.begin(); it != intR.end(); ++it) {
boost::numeric::ublas::vector<double> firstIntersectPoint(3), lastIntersectPoint(3);
Polygon_2 Overlap = it->outer_boundary();
typename CGAL::Polygon_2<Kernel>::Vertex_iterator vit;
int pointNr = 1;
//Loop through points of intersection polygon to find first and last intersection point.
for (vit = Overlap.vertices_begin(); vit != Overlap.vertices_end(); ++vit) {
CGAL::Bounded_side bsideThis = P.bounded_side(*vit);
CGAL::Bounded_side bsideArg = Q.bounded_side(*vit);
if (bsideThis == CGAL::ON_BOUNDARY && bsideArg == CGAL::ON_BOUNDARY && pointNr == 1) {
firstIntersectPoint <<= 0, CGAL::to_double(vit->x()), CGAL::to_double(vit->y());
pointNr = 2;
}
else if (bsideThis == CGAL::ON_BOUNDARY && bsideArg == CGAL::ON_BOUNDARY && pointNr == 2) {
lastIntersectPoint <<= 0, CGAL::to_double(vit->x()), CGAL::to_double(vit->y());
pointNr = 2;
}
}
//RESULT
std::cout << firstIntersectPoint << std::endl;
std::cout << lastIntersectPoint << std::endl;
}
雖然這個作品,我不認爲這是正確的方式去。有人可以告訴我這是否是正確的方法,或者指出如何更好地做到這一點。
討厭,但是,你可能會困擾於提供一點代碼。我對CGAL比較陌生,似乎無法從CGAL :: Polygon獲得2D安排並獲得學位。 –
你可以迭代地插入每個多邊形 - 爲什麼要建立一個額外的列表...... – BeyelerStudios
一次插入所有的段效率更高,因爲該功能基於平面掃描框架。 –