我的代码在[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)个子矩形(不均匀)。对于每个特定的矩形,我想计算与其相邻的矩形总数。
实施例
假设第一个坐标将单位正方形划分为四个矩形,如:
在这张照片中你可以看到,三个矩形与矩形-3相邻。
如果我按照这种方式行进,在我的第六步之后,单位平方分为19个矩形。所以它看起来像:
现在矩形-3附近有五个矩形。与矩形-11相邻的六个矩形。
假设我有一组万坐标,他们将方块细分为小的子矩形。我想用c ++来计算每个矩形相邻的矩形数。我该怎么办?
在互联网上搜索后,Flann似乎可以帮助我做到这一点。我阅读了用户手册,但无法理解我该怎么做。
任何人都可以帮助我吗?
答案 0 :(得分:0)
我建议你使用类似四叉树的东西来构建它(参见Wikipedia Quadtree article)。这里的区别在于你没有均匀地分割四叉树的子节点 - 你在插入的点处分开。
然后,您可以遍历树,搜索相交的边。
如果一个节点没有与查询矩形相交的边,那么你不需要递归到它的子节点,这样可以节省CPU时间,因为复杂性将是对数而不是线性。
树的叶子图块是您的矩形列表,因此您应该只计算树的叶子并与查询矩形相交的矩形。
这也是一种处理矩形细分的便捷方式 - 当你插入一个点时,你可以递归到树中找到要快速分割的矩形。
答案 1 :(得分:0)
您可以查找r-tree或kd-tree。树形图算法的工作原理类似。一个好的开始是对盒子进行排序并将它们放在树中,通过在2轴上递归分割并查看下一个盒子所在的位置。