Algorithm 大矩形集上的布尔运算

Algorithm 大矩形集上的布尔运算,algorithm,graphics,2d,spatial,shapes,Algorithm,Graphics,2d,Spatial,Shapes,我有两个(X1,Y1,X2,Y2)格式的长“矩形”列表,我希望对这些列表执行布尔运算(and,OR,ANDNOT)。我研究了一些常见的裁剪算法(Weiler Atherton、Vatti和其他),但它们似乎太通用了(它们都处理具有任意方向边的多边形)。我也不太喜欢基于位图的算法,因为与它们的大小相比,这些布尔形状的容差非常小 请为我的用例推荐任何算法。我的重点主要是最小化运行时间 谢谢 编辑-对两个长矩形列表的蛮力布尔操作是O(n^2)操作。我有理由相信,如果有正确的数据结构和算法,我们最多可以

我有两个(X1,Y1,X2,Y2)格式的长“矩形”列表,我希望对这些列表执行布尔运算(and,OR,ANDNOT)。我研究了一些常见的裁剪算法(Weiler Atherton、Vatti和其他),但它们似乎太通用了(它们都处理具有任意方向边的多边形)。我也不太喜欢基于位图的算法,因为与它们的大小相比,这些布尔形状的容差非常小

请为我的用例推荐任何算法。我的重点主要是最小化运行时间

谢谢

编辑-对两个长矩形列表的蛮力布尔操作是O(n^2)操作。我有理由相信,如果有正确的数据结构和算法,我们最多可以将其降到O(nlogn)


EDIT2-结果是另一个长的矩形列表(不相交,但可能接触)。例如,如果我的输入列表是{(0,0),(2,2)}和{(1,1),(3,3)},并且预期的布尔运算是或,那么我的输出应该是{(0,0),(2,1)},{(0,1),(3,2)},{(1,2),(3,3)}。

矩形彼此相交非常容易,就像间隔一样容易。但您的用例到底是什么?你只是(粗略地)描述了你想要什么,而不是为什么或者在什么上下文中。相交(and)很容易,如果它们都相交,结果将是一个矩形。但是被所有矩形(或)覆盖的区域可能有一些疯狂的形状。如果要返回非相交矩形列表,则必须将两个相交矩形拆分为3个新矩形。@harold,毫无疑问这很容易,但两个长矩形列表的蛮力布尔运算是O(n^2)。我完全可以想象会有O(nlogn)甚至更快的算法。我希望这是一个非常普遍的情况-也就是说,结果是另一个(可能非常长)矩形列表。@maraca,准确地说。输出形状将是一个“疯狂”形状,但它仍然可以写为矩形列表(非相交)。我正在寻找一个算法来找到这个疯狂的形状。此外,即使矩形相交,输出仍然可以是非矩形多边形。请看我在问题中描述的示例。这两个列表有相交的矩形,但输出仍然是一个疯狂的形状。