我已经能够通过反转它来旋转坐标数组,但是我需要另外两个可能的旋转,我不知道该怎么做。这是我当前的代码,我打印坐标作为例子。
/**
* Visual representation of coords.
*
* xxxxx
* xxxxx
* xx+xx
* xxxxx
* xxxxx
*
* + is [0,0]
*/
public static void main(String[] args) {
List < String > array = getCoordinates(0, 0, 2);
int i = 0;
System.out.println("Rotation 1: ");
for (String line: array) {
if (i == 4) {
System.out.println(line);
i = -1;
} else {
System.out.print(line + " ");
}
i++;
}
System.out.println(" ");
System.out.println("Rotation 2: ");
Collections.reverse(array);
i = 0;
for (String line: array) {
if (i == 4) {
System.out.println(line);
i = -1;
} else {
System.out.print(line + " ");
}
i++;
}
}
这是getCoordinates方法。
public static List < String > getCoordinates(int x, int z, int range) {
List < String > ids = new ArrayList < String > ();
for (int i = -range; i <= range; i++) {
for (int j = -range; j <= range; j++) {
int nx = x + i;
int nz = z + j;
ids.add("[" + nx + "," + nz + "]");
}
}
return ids;
}
对不起大量的代码,但这是我能够最好地说明我尝试过的唯一方法。
修改 这是输出。
Rotation 1:
[-2,-2] [-2,-1] [-2,0] [-2,1] [-2,2]
[-1,-2] [-1,-1] [-1,0] [-1,1] [-1,2]
[0,-2] [0,-1] [0,0] [0,1] [0,2]
[1,-2] [1,-1] [1,0] [1,1] [1,2]
[2,-2] [2,-1] [2,0] [2,1] [2,2]
Rotation 2:
[2,2] [2,1] [2,0] [2,-1] [2,-2]
[1,2] [1,1] [1,0] [1,-1] [1,-2]
[0,2] [0,1] [0,0] [0,-1] [0,-2]
[-1,2] [-1,1] [-1,0] [-1,-1] [-1,-2]
[-2,2] [-2,1] [-2,0] [-2,-1] [-2,-2]
这里有两个可能的旋转,因为它是一个正方形。这些是我想要的。
这是我在网上找到的相关图片,显示了3个旋转 方格。
答案 0 :(得分:1)
这是旋转的逻辑。尝试自己编写代码......
向右旋转原始90度:
/**
* original
* wqxxx
* asxxx
* xx+xx
* xxxxx
* xxxxx
*
* rotated
* xxxaw
* xxxsq
* xx+xx
* xxxxx
* xxxxx
*/
// w: -2,-2 -> -2,2
// q: -2,-1 -> -1,2
// a: -1,-2 -> -2,1
// s: -1,-1 -> -1,1
旋转右逻辑:旋转行=原始列,旋转列=原始行* -1
向左旋转原始90度:
/**
* original
* wqxxx
* asxxx
* xx+xx
* xxxxx
* xxxxx
*
* rotated
* xxxxx
* xxxxx
* xx+xx
* qsxxx
* waxxx
*/
// w: -2,-2 -> 2,-2
// q: -2,-1 -> 1,-2
// a: -1,-2 -> 2,-1
// s: -1,-1 -> 1,-1
旋转左逻辑:旋转行=原始列* -1,旋转列=原始行
答案 1 :(得分:0)
如果有人因任何原因碰巧碰到这个问题,这里是我用来旋转数组的代码。
public static void main(String[] args) {
List<String> array = getCoordinates(0,0,2);
List<String> rotated = new ArrayList<String>();
prnt(array); // original
for(int b = 0;b < 5;b++){
int index = 20+b;
for(int a = 0;a < 5;a++){
rotated.add(array.get(index));
index -= 5;
}
}
prnt(rotated); // 2nd rotation
Collections.reverse(array);
prnt(array); // 3rd rotation
Collections.reverse(rotated);
prnt(rotated); // 4th rotation
}
private static void prnt(List<String> rotated) {
int i = 0;
for(String line : rotated){
if(i == 4){
System.out.println(line);
i = -1;
}else{
System.out.print(line + " ");
}
i++;
}
}
输出是。
# x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x #
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x #
x x x x x
x x x x x
x x x x x
x x x x x
# x x x x