我正在拼接布局数组中的位图,它将更大的位图放在一起作为指导。将多个位图用于一个位图。我旋转整个位图的方法,我的解决方案是重新定位它,但是有这个轮换的数组帐户。位图的制作由数组的顺序决定。拼接假定数组从零开始,这是第一个索引或左上角,然后向右移动到结尾并转到下一行的开头。我想要一个90,180,270和360的功能来打电话。我认为360很容易我向后迭代。我使用11乘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
答案 0 :(得分:0)
试试这个。这可能会影响性能,但它是一个简单的解决方案。
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]));
}
}
}
这会像在您的示例中一样逆时针旋转阵列。但是,如果您想将其更改为顺时针,只需在int times = 4 - angle/90;
方法中将int times = angle/90;
更改为rotate(int[][] original, int angle)
。