2012-06-24 114 views
3

說在這張照片(圖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; 
} 

的反相確實相同的功能的旋轉雖然。任何幫助?

回答

3

好像你正試圖調換陣列(fig3 = transpose(fig1))。

使用double for循環並保存在條目[i][j]的值[j][i]

看到LINK對矩陣轉置的詳細信息...

所以一切的一切,你可以使用transpose得到如圖3,事後invert得到fig2。

+0

:TEMP =塊[i] [j]塊[i] [j] =塊[j]的[I]; chunk [j] [i] = temp;但它沒有做任何不同的事情,部分仍然是一樣的。幫幫我? – jocopa3

+0

創建一個新數組'result'並將輸入數組的'input [i] [j]'條目保存到'result [j] [i]'條目中。不要在輸入數組上工作! – Baz

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