说,我想从矩形板上划掉一些矩形孔。例如,
情况1,洞相交:
一个带有孔0,1,2的borad x,矩形0和1相交。
xxxxxxxxxxx
xxxxxx222xx
x000xx222xx
x00011222xx
x00011xxxxx
xxx111xxxxx
xxxxxxxxxxx
或更简单,情况2,没有孔相交:
xxxxxxxxxxx
xxxxx2222xx
x00xx2222xx
x00xx2222xx
x00x111xxxx
xxxx111xxxx
xxxxxxxxxxx
后者更像是“在一个大矩形内反转一组矩形”。
我的问题是:如何计算一组完全覆盖板x的子矩形?
Input: a larger rect, and a set of hole rects
Output: a set of sub rects cover exactly the larger rect with holes
rect结构可能如下面的CCRect,协调类型是float:
typedef struct {float x; float y;} CGPoint;
typedef struct {float width, float height} CGSize;
typedef struct {CGPoint origin; CGSize size;} CGRect;
有什么好主意吗?
答案 0 :(得分:1)
您的问题中缺少约束。你想如何优化resutlt你想要尽可能少的矩形?
网格上有边缘吗?
我会这样做:
这个第二关是棘手的,那里有很多优化。 一个简单的选择将是交替连接verticaly然后horizontaly。这样你就会得到更大的矩形。
编辑:
如果在传递1期间构建BSP树,则可以加速显着性传递2.每次分割时,它会创建一个新节点,其中2个叶子是子矩形。在第2阶段找到邻居会更快。