java – 将矩阵旋转到位

前端之家收集整理的这篇文章主要介绍了java – 将矩阵旋转到位前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在解决旋转NxN矩阵的问题.

似乎我的代码进行了旋转,但在图像上留下了X.
所以我猜它正在不正确地旋转边缘.
我附加了两个图像作为样本输入和输出.

我的代码出了什么问题:

  1. public static void rotateRight(float[][] img){
  2. for (int i=0; i<N/2; i++){
  3. for (int j=i; j<N-i; j++){
  4. int J_COMP = N-j-1; //complement of J
  5. int LEFT = i;
  6. int RIGHT = N-i-1;
  7. int TOP = i;
  8. int BOTTOM = N-i-1;
  9.  
  10. float temp = img[J_COMP][LEFT];
  11. img[J_COMP][LEFT] = img[BOTTOM][J_COMP];
  12. img[BOTTOM][J_COMP] = img[j][RIGHT];
  13. img[j][RIGHT] = img[TOP][j];
  14. img[TOP][j] = temp;
  15. }
  16. }
  17. }

解决方法

您正在旋转主对角线两次.

修复内循环(参见“修复”评论)

  1. package tests.StackOverflow;
  2.  
  3. public class Question_20773692 {
  4.  
  5. private static int N;
  6.  
  7. public static void main(String[] args) {
  8.  
  9. float[][] img;
  10. int count;
  11.  
  12. N=3;
  13. count = 0;
  14. img = new float[N][N];
  15. for(int i=0; i<N; ++i) {
  16. for(int j=0; j<N; ++j) {
  17. img[i][j] = count++;
  18. }
  19. }
  20.  
  21. printImg(img);
  22.  
  23. rotateRight(img);
  24.  
  25. printImg(img);
  26.  
  27. }
  28.  
  29. public static void printImg(float[][] img) {
  30. for(int j=0; j<N; ++j) {
  31. System.out.print("-");
  32. }
  33. System.out.println();
  34. for(int i=0; i<N; ++i) {
  35. for(int j=0; j<N; ++j) {
  36. System.out.print((int)(img[i][j]));
  37. }
  38. System.out.println();
  39. }
  40. for(int j=0; j<N; ++j) {
  41. System.out.print("-");
  42. }
  43. System.out.println(); }
  44.  
  45. public static void rotateRight(float[][] img){
  46. for (int i=0; i<N/2; i++){
  47. for (int j=i; j<N-i; j++){
  48. //for (int j=i+1; j<N-i; j++){ //fix
  49. int J_COMP = N-j-1; //complement of J
  50. int LEFT = i;
  51. int RIGHT = N-i-1;
  52. int TOP = i;
  53. int BOTTOM = N-i-1;
  54.  
  55. float temp = img[J_COMP][LEFT];
  56. img[J_COMP][LEFT] = img[BOTTOM][J_COMP];
  57. img[BOTTOM][J_COMP] = img[j][RIGHT];
  58. img[j][RIGHT] = img[TOP][j];
  59. img[TOP][j] = temp;
  60. }
  61. }
  62. }
  63. }

猜你在找的Java相关文章