3

この図 (図 1) の各ピクセルが配列の要素であるとします。反時計回りに 90 度回転し (図 2)、垂直に反転するにはどうすればよいですか (図 3)。

図1: 図1

図 2:図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;
}

ただし、反転は回転と同じ機能を果たします。何か助けはありますか?

4

2 に答える 2

3

配列を転置しようとしているようです ( fig3 = transpose(fig1))。

double for ループを使用し、エントリ[i][j]に の値を保存します[j][i]

行列転置の詳細については、リンクを参照してください...

全体として、使用transposeして fig3 を取得し、その後で fig2invertを取得できます。

于 2012-06-24T09:50:12.240 に答える
2

バズは正しいです、転置は仕事を成し遂げます。転置メソッドがソース配列のみを使用したように見えますか?両方の長さ全体をループした場合、前半で行ったすべての作業を元に戻すことになります。この転置法は私のために働きます:

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;
}
于 2012-06-24T11:08:20.063 に答える