假设此图片中的每个像素(图1)都是数组中的元素。如何将其逆时针旋转90度(图2)并垂直反转(图3)?
图1:
图2:
图3:
我目前的代码是:
private static Color[][] invert(Color[][] chunk){ //same as rotate
Color[] temp;
for(int i=0;i<chunk.length/2;i++){ //reverse the data
temp=chunk[i];
chunk[i]=chunk[chunk.length-i-1];
chunk[chunk.length-i-1]=temp;
}
return chunk;
}
private static Color[][] rotate(Color[][] chunk){
int cx = chunk.length;
int cz = chunk[0].length;
Color[][] rotated = new Color[cz][cx];
for(int x=0;x<cx;++x){
for(int z=0;z<cz;++z){
rotated[z][x]=chunk[cz-z-1][x];
}
}
return rotated;
}
反转功能与旋转功能相同。有什么帮助吗?
答案 0 :(得分:3)
好像你试图转置数组(fig3 = transpose(fig1)
)。
使用double for循环并在条目[i][j]
中保存[j][i]
的值。
有关矩阵转置的更多信息,请参阅LINK
总而言之,您可以使用transpose
获取fig3,然后使用invert
获取fig2。
答案 1 :(得分:2)
Baz是对的,转置将完成工作。 看起来你的转置方法只使用了源数组?如果你绕过这两个长度,你将撤消你在上半场所做的所有工作。 这个转置方法对我有用:
public static Color[] [] transpose (Color[] [] a){
int[] [] t = new Color [a [0].length] [a.length];
for (int i = 0 ; i < a.length ; i++){
for (int j = 0 ; j < a [0].length ; j++){
t [j] [i] = a [i] [j];
}
}
return t;
}