计算相邻矩形的数量

我的代码在[0,1]范围内的2D空间中打印一组(X,Y)坐标。

void Rect_Print() { cout << "In counter-clockwise fashion" << endl; cout << "#Rectangle ( x0, y0) ( x1, y1) " << endl; for (int b=0; b<Rect_Count; b++) { double Area = (Rect[b].x0 - Rect[b].x1) * (Rect[b].y0 - Rect[b].y1); cout << fixed << setprecision(4) << (b+1) << " (" << Rect[b].x0 << "," << Rect[b].y0 << ") (" << Rect[b].x1 << "," << Rect[b].y1 << ")" << endl; } cout << "Number of divisions (N = 3j-2) = " << Rect_Count << endl; } 

这些点将单位正方形划分为(3j-2)个子矩形(不均匀)。 对于每个特定的矩形,我想计算与其相邻的矩形总数。

  1. 假设第一个坐标将单位正方形划分为四个矩形,如:

    图片

    在这张图片中你可以看到,有三个矩形与矩形-3相邻。

  2. 如果我按照这种方式行进,在我的第六步之后,单位平方分为19个矩形。 所以它看起来像:

    图片

    现在有五个矩形与矩形-3相邻。 与矩形-11相邻的六个矩形

假设我有一万个坐标的集合,他们将正方形细分成小的子矩形。 我想用c ++来计算每个矩形相邻的矩形数。 我该怎么做?

在互联网上搜索后,Flann似乎可以帮助我做到这一点。 我阅读了用户手册,但无法理解我该怎么做。

谁能帮我?

我建议你使用类似四边形树的东西构建它(参见Wikipedia Quadtree文章 )。 这里的不同之处在于,您不能均匀地分割四叉树的子节点 – 您将在插入的点处进行分割。

然后,您可以遍历树,搜索相交的边。

如果一个节点没有与查询矩形相交的边,那么你不需要递归到它的子节点,这将为10,000个矩形执行此操作时节省CPU时间,因为复杂性将是对数而不是线性。

树的叶子图块是您的矩形列表,因此您应该只计算树的叶子并与查询矩形相交的矩形。

它也是处理矩形细分的便捷方式 – 当您插入一个点时,您可以递归到树中以找到要快速分割的矩形。

您可以查找r树或kd树。 树形图算法的工作原理类似。 一个好的开始是对盒子进行排序并将它们放在树中,通过递归分割它在2轴并查看下一个盒子适合的位置。