伙计们,我有一个非常奇怪的问题。我正在尝试实现一个嵌套的for循环,它将一个矩形拆分成更小的块,然后检查这些较小的块中哪些具有我在其中定义的数组中的点(大矩形是320 * 240 btw):
int[,] edgetrunc = new int[edgeIndex, 2]; //edgeIndex is the number of points in the external array
Array.Copy(edgePoint, edgetrunc, edgeIndex*2);//truncates the nulls from the tail of my array
int delx = 16;//width of block
int dely = 12;//height of block
int blockIndex = new int();
bool[] block = new bool[(depthFrame.Width/delx)*(depthFrame.Height/dely)];
for (int ymin = 0;ymin < depthFrame.Height;ymin += dely)
{
for (int xmin = 0; xmin < depthFrame.Width; xmin += delx)
{
blockIndex = (xmin / delx) + (ymin / dely);
for (int i = 0; i < edgeIndex; i++)
{
if (edgetrunc[i, 0] >= xmin && edgetrunc[i, 0] < xmin++ && edgetrunc[i, 1] >= ymin && edgetrunc[i, 1] < ymin++)
{
block[blockIndex] = true;
break;
}
}
}
}
然而,这是问题,我在第二个for循环(xmin循环)上设置了一个断点并开始迭代它,并且xmin的值在第一次迭代时从0跳到320,然后停留在那里和ymin每次迭代都单独改变。我要去克里吗?我做错了什么?
PS我甚至测试了这个,我遇到了同样的问题:
for (int ymin = 0;ymin < depthFrame.Height;ymin += dely)
{
for (int xmin = 0; xmin < depthFrame.Width; xmin += delx)
{
}
}
编辑:
想通了,这很奇怪,显然它与我试图找到块索引的方式有关。为了解决这个问题,我在for循环之外将blockIndex初始化为0,并在第3个for循环之后放入blockIndex ++,感谢帮助,无论如何=) int blockIndex = 0;
bool[] block = new bool[(depthFrame.Width/delx)*(depthFrame.Height/dely)];
for (int ymin = 0;ymin < depthFrame.Height;ymin += dely)
{
for (int xmin = 0; xmin < depthFrame.Width; xmin += delx)
{
for (int i = 0; i < edgeIndex; i++)
{
if ((edgetrunc[i, 0] >= xmin) && (edgetrunc[i, 0] < (xmin + delx)) && (edgetrunc[i, 1] >= ymin) && (edgetrunc[i, 1] < (ymin + dely)))
{
block[blockIndex] = true;
break;
}
}
blockIndex++;
}
}
答案 0 :(得分:2)
我认为您可能打算使用xmin + 1和ymin + 1,而不是使用xmin ++和ymin ++。 ++将改变变量中的值。
答案 1 :(得分:0)
在第一次内循环迭代中,运行以下命令:
xmin++
作为最内层循环中if语句的一部分。这将执行320次,因此您的价值。第二次迭代,
edgetrunc[i, 0] >= xmin
将为false,因此xmin++
行不会被执行。通常,您应该避免在if语句中使用xmin++
之类的变异语句。重构一下,看看它是否解决了你的问题
答案 2 :(得分:0)
它跳起来的原因是因为你的内循环内的xmin++
语句中有if
。
根据xmin
的值,这可以非常轻松地提升edgeIndex
的价值。
x++
递增x
然后使用其旧值。我认为您需要的只是x+1
,它使用值加1而不更改值。
同样适用于ymin++
。
换句话说,它应该是:
if (edgetrunc[i, 0] >= xmin && edgetrunc[i, 0] < xmin + 1 &&
edgetrunc[i, 1] >= ymin && edgetrunc[i, 1] < ymin + 1)