写的比较粗糙,但是勉强能用
适用条件:
- 二维数组
方法一:使用指针传递二维数组
void fftShift(int *A, int *out, int M, int N)
{
int X0, Y0;
if (M%2 == 0)
{
X0 = M/2 + 1;
}
else
{
X0 = (M+1)/2;
}
if (N%2 == 0)
{
Y0 = N/2 + 1;
}
else
{
Y0 = (N+1)/2;
}
//M为奇数,N为奇数
if (M%2 !=0 && N%2 !=0)
{
for (int i=0; i<X0; i++)
{
for (int j=0; j<Y0; j++)
{
// out[i+X0-1][j+Y0-1] = A[i][j];
*(out+(i+X0-1)*N+j+Y0-1) = *(A+i*N+j);
}
}
for (int i=X0; i<M; i++)
{
for (int j=0; j<Y0; j++)
{
// out[i-X0][j+Y0-1] = A[i][j];
*(out+(i-X0)*N+j+Y0-1) = *(A+i*N+j);
}
}
for (int i=0; i<X0; i++)
{
for (int j=Y0; j<M; j++)
{
// out[i+X0-1][j-Y0] = A[i][j];
*(out+(i+X0-1)*N+j-Y0) = *(A+i*N+j);
}
}
for (int i=X0; i<M; i++)
{
for (int j=Y0; j<M; j++)
{
// out[i-X0][j-Y0] = A[i][j];
*(out+(i-X0)*N+j-Y0) = *(A+i*N+j);
}
}
}
//M为偶数,N为偶数
if (M%2 == 0 && N%2 == 0)
{
for (int i=0; i<X0-1; i++)
{
for (int j=0; j<Y0-1; j++)
{
// out[i][j] = A[i+X0-1][j+Y0-1