我试图想出一个快速的迭代/递归过程来告诉java2D路径何时不与任何其他java2D对象相交。换句话说,我想提出一个"快速失败"仅基于这些java2D路径的矩形边界的交集算法。这是一个示例屏幕截图:
在此屏幕截图中,您可以看到各种圆圈,其中一些圆圈重叠(左侧的链条)。
我提出这个问题的主要原因是我希望改进我用于组合(或合并)所有重叠对象的算法。 在上面的示例中,在合并此图片中的所有对象后,它将如下所示:
这是我迄今为止所尝试的内容:
一个双反转while循环,每次迭代我测试两个对象是否相交(使用Java' Area.Intersect(Area)),如果是,则创建合并对象,将其添加到对象列表并删除合并在一起并继续的两个对象。不幸的是,对于许多对象(如屏幕截图中的情况),该算法往往非常慢。
一个预处理步骤,我再次使用双循环来尝试筛选出那些仅基于比较矩形边界而无法相交的对象。用于比较矩形边界的单独计算很快,但是,我仍然必须针对每个其他对象测试每个对象以确保它没有交叉点。因此,我再次使用二次时间算法。
一种递归方法,它可以贪婪地搜索交集。因此,在对象A处,如果找到交叉对象B,则在对象B上进行递归以查找其所有相交对象,依此类推。这找到了所有相交对象的链,之后我可以抛弃所有大小为1的链并仅合并剩余的链。但是,在递归的每个步骤中,您仍然必须检查除链中导致您到达当前对象的所有其他对象,因此它似乎仍有可能在我的估计中变慢。一个好处是,一旦你访问了一个分支,那个分支中的所有对象都被确定为具有交叉点以及它们相交的内容,因此在继续向下分支时不需要检查这些对象。
任何有关此类事情的更好算法的建议/评论/链接对我都非常有益。谢谢!