我有一个矩形列表(它们无法旋转):
struct Rectangle {
double centerX;
double centerY;
double width;
double height;
Rectangle(double x, double y, double w, double h):centerx(x),centery(y),width(w),height(h){}
};
std::vector<Rectangle> rectangles;
rectangles.push_back(Rectangle(0 , 0 , 1 , 1 );
rectangles.push_back(Rectangle(0.5, 0.5, 1 , 1 );
rectangles.push_back(Rectangle(3 , 2 , 0.5, 0.6);
rectangles.push_back(Rectangle(0.2, 0.5, 0.5, 0.6);
rectangles.push_back(Rectangle(2 , -0.3, 0.4, 0.4);
rectangles.push_back(Rectangle(0.2, -0.4, 0.3, 0.4);
我希望能计算至少有一个交集的矩形组,且具有传递性。即如果r1和r2相交,r2和r3相交,则r1、r2、r3是同一组的一部分。
在这个样例中,该组包括:
{{3}, {4, 1, 2}, {5, 6}}
组的顺序和组内元素的顺序并不重要。
我该如何计算这些组?如果需要,我可以更改数据结构。
例如,我可以将
std::vector
更改为std::set
,并按左侧顶点X坐标对矩形进行排序。这样,我就可以使用扫描线算法。但是我找不到任何可应用于我的问题的示例。我该如何获取相交的组?