我有一个带有立方体的矩阵,它们有以下颜色:红色,绿色,黄色。
一些彼此相邻的立方体与其他颜色相同的立方体接触。例如:
1 2 3 4 5
1 r r g y r
2 g y g g g
3 g y r g r
4 g g r g g
我想要计算有多少相同颜色的立方体彼此靠近(在这个例子中有7 g(绿色)立方体彼此靠近。这部分我已经完成了。
bool Move(Cubes & Test, Cubes & Kub, int i, int j, int p, string color, int & count){
int tt = 0;
bool yra = false;
if(Test.Get(i, j).GetCube(p) == Color){
Test.SetSP(i, j, p, "-");
count++;
while(!yra && tt < 4 ){
i = i + Test.GetEil(tt);
j = j + Test.GetStu(tt++);
if(Test.Get(i, j).GetCube(p) == color){
Move(Test, Kub, i, j, p, color, count);
}
}
}
return yra;
}
void Max(int & count, int & max, string & s, string Spal[], int sp, Maximum Maxi[], int & ind, int i, int j){
if(count!=0){
Maxi[ind].Set(count, Spal[sp]);
ind++;
}
if(max < count){
max = count;
count = 0;
s = Spal[sp];
}
else
count = 0;
}
现在不知怎的,我需要保存彼此接近的绿色坐标。
我该怎么做才能实现这一目标?
答案 0 :(得分:1)
根据您的问题,我认为您正在尝试确定最近的正方形和不多维数据集 - 因为您正在使用两个变量来跟踪{{ 1}}和i
。此外,我无法准确评论您的代码,因为缺少一些细节。
所以,既然你已经问过如何确定最近的“立方体”(原文如此) - 即正方形 - 这就是所谓的Nearest Neighbor Search - 这也称为邮局问题< / strong> - 其难度因维度而增加。
尽管如此,检查你的网格并假设我们仅限于2D:
我们立即观察到我们可以使用常规的欧几里德技术来找到相对于一个最接近的方形:
因此,如果我们知道每个方格的坐标,我们就可以计算出当前方格的距离。
实施例
黄色方块的最近邻居(第1行,第4栏)(假设每边的大小为2):
此示例网格还有另外两个黄色方块j
和square1(2, 2)
如果我们假设这个网格是笛卡尔坐标,绿色正方形的左下角(第4行,第1列)以坐标(1.0,1.0)为中心(记住我们说边长为2)。然后,中心坐标为:
square2(3, 2)
此时您必须确定如何计算最近的平方:沿边缘,或从中心到中心?
中心到中心是最简单的,使用黄色方块(第1行,第4栏),其他方格相对于它的距离(使用给定的公式)是:
yellow: (7.0, 7.0)
square1: (3.0, 5.0)
square2: (3.0, 3.0)
通过这些,我们可以清楚地看到yellow -> square1: sqrt(4^2 + 2^2) = sqrt(20) = 4.4721...
yellow -> square2: sqrt(4^2 + 4^2) = 4*sqrt(2) = 5.6569...
更接近黄色方块(第1行,第4列)。
因此,计算这些坐标的一种方法是在网格上轮询不同颜色的所有正方形,确定它们各自的坐标。
然后,迭代这些坐标(沿边或中心)并确定哪个方格与所讨论的特定方格的距离最小。
存储原始正方形和最近正方形的坐标。
重复所有方格。
有关此内容的更多信息,请参阅:
http://web.engr.oregonstate.edu/~tgd/classes/534/slides/part3.pdf