我正在解决旋转NxN矩阵的问题.
似乎我的代码进行了旋转,但在图像上留下了X.
所以我猜它正在不正确地旋转边缘.
我附加了两个图像作为样本输入和输出.
我的代码出了什么问题:
public static void rotateRight(float[][] img){ for (int i=0; i<N/2; i++){ for (int j=i; j<N-i; j++){ int J_COMP = N-j-1; //complement of J int LEFT = i; int RIGHT = N-i-1; int TOP = i; int BOTTOM = N-i-1; float temp = img[J_COMP][LEFT]; img[J_COMP][LEFT] = img[BOTTOM][J_COMP]; img[BOTTOM][J_COMP] = img[j][RIGHT]; img[j][RIGHT] = img[TOP][j]; img[TOP][j] = temp; } } }
解决方法
您正在旋转主对角线两次.
修复内循环(参见“修复”评论)
package tests.StackOverflow; public class Question_20773692 { private static int N; public static void main(String[] args) { float[][] img; int count; N=3; count = 0; img = new float[N][N]; for(int i=0; i<N; ++i) { for(int j=0; j<N; ++j) { img[i][j] = count++; } } printImg(img); rotateRight(img); printImg(img); } public static void printImg(float[][] img) { for(int j=0; j<N; ++j) { System.out.print("-"); } System.out.println(); for(int i=0; i<N; ++i) { for(int j=0; j<N; ++j) { System.out.print((int)(img[i][j])); } System.out.println(); } for(int j=0; j<N; ++j) { System.out.print("-"); } System.out.println(); } public static void rotateRight(float[][] img){ for (int i=0; i<N/2; i++){ for (int j=i; j<N-i; j++){ //for (int j=i+1; j<N-i; j++){ //fix int J_COMP = N-j-1; //complement of J int LEFT = i; int RIGHT = N-i-1; int TOP = i; int BOTTOM = N-i-1; float temp = img[J_COMP][LEFT]; img[J_COMP][LEFT] = img[BOTTOM][J_COMP]; img[BOTTOM][J_COMP] = img[j][RIGHT]; img[j][RIGHT] = img[TOP][j]; img[TOP][j] = temp; } } } }