我的程序创建了一个矩阵。它移动并将其置于一个更大的中心。现在我想用第一个矩阵的边缘值填充创建的边框,使其看起来像这样:
到目前为止,我有以下代码,但它似乎没有正常工作(让我们将矩阵视为具有宽度、高度和边框的图像):
/////////////////////////Up/Down Fill////////////////////////////
for(i=border;i<(width+border);i++){
for(j=0;j<(height+2*border);j++){
if(j<border){
fmatr[i][j]=fmatr[i][border];
}
else if(j>(height+border)){
fmatr[i][j]=fmatr[i][(height+border)];
}
}
}
/////////////////////////Left/Right//////////////////////////////
for(i=0;i<(width+2*border);i++){
for(j=0;j<(height+2*border);j++){
if(i<border){
fmatr[i][j]=fmatr[border][j];
}
else if(i>(width+border)){
fmatr[i][j]=fmatr[(width+border)][j];
}
}
}
谁能指出正确的方向,如何做到这一点?
最佳答案
你是一个失误的受害者。
通常在 C 中,要迭代一个序列,您可以使用开始索引和 next_to_last 索引,以这种方式:
for (i = first; i < next_to_last; ++i)
这很方便,因为 next_to_last 索引是第一个加上长度:
for (i = first; i < first + length; ++i)
如果您想知道索引是否超出范围,您可以使用 <
和 >=
:
out_of_bounds = i < first || i >= next_to_last;
out_of_bounds = i < first || i >= first + length;
这一切都很酷,因为当你有两个连续的序列时,当你从一个序列转到另一个序列时,你不需要做任何调整:
for (i = 0; i < a; ++i) ...;
for (; i < b; ++i) ...;
for (; i < c; ++i) ...;
但是如果你想访问序列的最后一个元素,你必须记住减去一个:
last = array[next_to_last - 1];
last = array[first + length - 1];
所以当你说:
else if(j>(height+border)){
fmatr[i][j] = fmatr[i][(height+border)];
}
你的意思可能是:
else if(j >= height + border){
fmatr[i][j] = fmatr[i][height + border - 1];
}
对于 witdh run 也是如此。
也就是说,我会将内部循环写成两个循环。海事组织你的意图是这样的:
for (j = 0; j < border; ++j)
fmatr[i][j] = fmatr[i][border];
for (j = height + border; j < height + 2 * border; ++j)
fmatr[i][j]=fmatr[i][height + border - 1];
与宽度运行相同。
关于c - 通过复制边值来填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290505/