如何逆时针旋转阵列并垂直反转?

时间:2012-06-24 09:37:06

标签: java rotation multidimensional-array invert

假设此图片中的每个像素(图1)都是数组中的元素。如何将其逆时针旋转90度(图2)并垂直反转(图3)?

图1: fig 1

图2:fig 2

图3:enter image description here

我目前的代码是:

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;
}

反转功能与旋转功能相同。有什么帮助吗?

2 个答案:

答案 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;
}