矩阵中的交换反对称元素

时间:2017-04-14 22:06:06

标签: c matrix

我试图将一个数组的元素从它的位置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

我不知道找到中心,从中心的哪个元素来计算位移。

1 个答案:

答案 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的问题。