Thursday 5 November 2015

Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees



The rotation can be performed in layers, where you perform a cyclic swap on the edges on each layer. In the first for loop, we rotate the first layer (outermost edges). We rotate the edges by doing a four-way swap first on the corners, then on the element clockwise from the edges, then on the element three steps away.

Once the exterior elements are rotated, we then rotate the interior region’s edges.

Sample Program:-


 /**  
  * @author Dixit  
  *   
  */  
 public class RotateMatrix {  
      /**  
       * @param args  
       */  
      public static void main(String[] args) {  
           int m[][] = { { 1, 2 ,3}, { 4, 5 ,6} ,{7,8,9}};  
           int n = 3;  
           for (int i = 0; i < n; i++)  
           {  
                for (int j = 0; j < n; j++) {  
                     System.out.print(m[i][j] + " ");  
                }  
                System.out.println("\n");  
           }  
           rotate(m, n);  
      }  
      public static void rotate(int[][] matrix, int n) {  
           for (int layer = 0; layer < n / 2; ++layer) {  
                int first = layer;  
                int last = n - 1 - layer;  
                for (int i = first; i < last; ++i) {  
                     int offset = i - first;  
                     int top = matrix[first][i]; // save top  
                     // left -> top  
                     matrix[first][i] = matrix[last - offset][first];  
                     // bottom -> left  
                     matrix[last - offset][first] = matrix[last][last - offset];  
                     // right -> bottom  
                     matrix[last][last - offset] = matrix[i][last];  
                     // top -> right  
                     matrix[i][last] = top; // right <- saved top  
                }  
           }  
           System.out.println("Resulting Matrix after 90 degree rotation \n");  
           for (int i = 0; i < n; i++)  
           {  
                for (int j = 0; j < n; j++) {  
                     System.out.print(matrix[i][j] + " ");  
                }  
                System.out.println("\n");  
           }  
      }  
 }  

Output:-


 1 2 3   
 4 5 6   
 7 8 9   
 Resulting Matrix after 90 degree rotation :  
 7 4 1   
 8 5 2   
 9 6 3   


Enjoy Programming.

No comments:

Post a Comment