【问题标题】:Java Iterating into array for different orientationsJava迭代到不同方向的数组
【发布时间】:2014-05-10 22:42:36
【问题描述】:

我正在从一个布局数组中拼接一个位图,它将较大的位图放在一起作为指导。将多个位图合并为一个位图。我旋转整个位图,我的解决方案是重新拼接它,但让数组解释这种旋转。位图的制作由数组的顺序决定。拼接假设数组从零开始,即第一个索引或最左上角,然后从右到尾,再到下一行的开头。我想要一个 90、180、270 和 360 功能来调用。我认为 360 很容易我向后迭代。我使用的是 11 x 11,这是恒定的。

例如

0, 1, 3, 4
5, 6, 7, 8,
9, 10, 11, 12
13, 14, 15, 16

当我旋转 90 度时

4, 8, 12, 16
3, 7, 11, 15
1, 6, 10, 14
0, 5, 9,  13

【问题讨论】:

    标签: java android arrays bitmap


    【解决方案1】:

    试试这个。这可能会影响性能,但它是一个简单的解决方案。

    import java.util.Arrays;
    
    public class RotateMatrix {
    
        public static void main(String[] args) {
            int original[][] = { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
                    { 13, 14, 15, 16 } };
    
            printArray(original);
            System.out.println("After 90 Degree");
            printArray(rotate(original, 90));
            System.out.println("After 180 Degree");
            printArray(rotate(original, 180));
            System.out.println("After 270 Degree");
            printArray(rotate(original, 270));
            System.out.println("After 360 Degree");
            printArray(rotate(original, 360));
        }
    
        private static int[][] rotate(int[][] original, int angle) {
    
            int[][] output = original;
            int times = 4 - angle/90;
    
            for(int i=0; i<times; i++){
                output = rotate(output);
            }
    
            return output;
        }
    
        private static int[][] rotate(int[][] original) {
    
            int n = original.length;
            int m = original[0].length;
            int[][] output = new int[m][n];
    
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    output[j][n - 1 - i] = original[i][j];
            return output;
        }
    
        private static void printArray(int[][] array) {
            for (int i = 0; i < array.length; i++) {
                System.out.println(Arrays.toString(array[i]));
            }
        }
    
    }
    

    这会像您的示例一样逆时针旋转阵列。但是,如果您想将其更改为顺时针方向,只需在 rotate(int[][] original, int angle) 方法中将 int times = 4 - angle/90; 更改为 int times = angle/90;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2015-12-12
      • 2019-03-14
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多