我想构建一个动态数据结构,它可以保存多边形列表并返回与指定矩形重叠的多边形列表。
我查看了bst树(和四棵树),但当多边形重叠时,这些似乎不能很好地工作。
在我推翻自己的废话之前,我应该检查出任何好的想法吗?修改
让我们假设所有多边形都是正常的非旋转矩形。我愿意在点测试期间接受命中(多边形测试中的点)(无论如何我可能会这样做),并且在区域测试期间获得他们的边界框也同样好。只有一小部分实际上不会与相关区域重叠。
答案 0 :(得分:2)
我会看2-d segment delaunay graphs。另见Nef polygons。 CGAL在polygons上有很多设置操作。这个question的答案也可能有价值
修改如果您的多边形是非旋转矩形,请参阅R-Trees
答案 1 :(得分:0)
为什么你自己写这个? Java提供复杂的交叉测试。您可以将多边形数据结构和矩形转换为Java.awt.geom.Area,然后调用Area.intersect()方法,该方法可以为您完成所有数学运算。
它还会处理所有很少发生(但仍然很重要)的特殊情况,这些情况真的很难被捕获。
答案 2 :(得分:0)
我刚写了一个常规的四叉树,它允许每个叶子节点保持无限多边形,如果叶子的边界与桶中每个多边形的边界相等。否则叶子节点在分裂之前限制为8个多边形。