我试图将一个数组的元素从它的位置a(不确定它是否这么说)改变它相对于矩阵中心的反对称位置,如果要交换的位置构成中心的一部分,则不应该完成(取决于矩阵,中心可以是1,2或4个单元格):
BLOB
中心将是:13
一个例子是将数字2替换为数字24.我曾想过通过计算我必须在x和y中从中心到元素位置(dx dy)的位移来做到这一点,然后从中心到达反对称位置的位移将是-dx -dy。
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
当矩阵有奇数列或行时,我的问题出现了,因为在这种情况下,中心不是单个位置,而是一个集合。例如,这个5 * 4的矩阵
int mat [][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
int aux;
int i = 0;
int j = 1; // i and j are the indeces of the element to be exchanged
int xcenter=col/2;
int ycenter=fil/2; // xcenter and xcenter are the indeces of the center
int dx = j-xcenter;
int dy = i-ycenter; // dx dy are the displacements
aux=mat[i][j];
mat[i][j]=mat[xcenter-dx][ycenter-dy];
mat[xcenter+dx][ycenter+dy]=aux;
中心将是:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
我不知道找到中心,从中心的哪个元素来计算位移。
答案 0 :(得分:0)
您可以像这样简化坐标计算:
xcenter-dx = xcenter - (j-xcenter) = 2*xcenter - j = 2*col/2 - j = col - j
同样
xcenter+dx = j
ycenter-dy = fil - i
ycenter+dy = i
所以你没有将奇数除以2的问题。