2016-06-14 53 views
0

如何在不旋轉矩陣的情況下旋轉總矩陣之後在給定矩陣中找到索引x,y處的元素。在C/C++中旋轉後,在給定矩陣的x,y處查找元素?

這意味着我只是對該座標感興趣,並不希望對總矩陣執行全部操作,而只是簡單地獲取任何索引處的元素。

Example: 

suppose a matrix is given 

1 2 3 
4 5 6 
7 8 9 

and i want to find the element at 1,1 after rotating the matrix by 90 degree. 

answer should be "7". 

**NOTE**: Without performing the rotation on total matrix. 

and if i want the element at 1,2 than the answer should be "4". 

I hope I clearly communicated the question please help if you know the solution or algorithm for this question. 
Thank you. 

+0

所以你想找到元素執行旋轉的功能?或者只是一個計算一個元素將要去哪裏的函數? 無論哪種方式你需要計算旋轉 – Mixone

+1

也元素1,1將5,元素0,0將7,索引開始於0而不是1 – Mixone

+4

旋轉座標在相反的方向矩陣將旋轉。 –

回答

4

假設你有一個m x n matrix,你有興趣的M[i][j]旋轉後的位置。

所以,順時針旋轉90度,M[i][j] -> M[j][m+1-i]. 作爲你的榜樣,M[3][1] will be M[1][3+1-3] after rotation.

希望旋轉後,問題得以解決。

+0

對於基於1的指數來說,這是正確的。對於基於0的索引M [i] [j] - > M [j] [m-i]。 –

+0

我感興趣的是在旋轉之後在M [i] [j]處找到元素。我現在能夠找到它。謝謝您的回答。 –

1
// For 90 degree rotation using correct indexing for x and y (starting at 0 not 1) 
// Assuming square matrix 

template<class T, int size> 
T elemAfter90degRot(int x, int y, T[size][size] mat) { 
    int j = y; 
    int i = size - 1 - x; 
    return mat[i][j]; 
} 

我認爲應該對一個方陣的90度旋轉這樣的伎倆

1

要映射:

(x,y) -> (x', y') 

假設如下:

x' = ax + by + c 
y' = dx + ey + f 

現在,(1,1)映射到(W,1)

w = a + b + c 
1 = d + e + f 

(1,W)映射到(1,1)

1 = a + bw + c 
1 = d + ew + f 

和(W,H)映射到(1,H)

1 = aw + bh + c 
h = dw = eH + f 

求解2,3和4方程並填入1得到的值。 (提示:b = -1,e = 0)

1

下面是解決問題的一種方法(除了使用別人的解決方案)。

很明顯,每個元素的列索引是該元素在旋轉後的行索引(至少,我希望這很清楚)。

所以,問題是旋轉後元素的列索引。

第一行將成爲最後一列,第二行將成爲最後一列,依此類推直到最後一行成爲第一列。

查看此方法的一種方法是我們有(行的)i = 1, 2, ..., m的序列,並且想要將其映射到(列)序列j = m, m - 1, m - 2, ..., 2, 1的序列。
但是m = m + 1 - 1,m - 1 = m + 1 - 2,m - 2 = m + 1 - 3,...,1 = m + 1 - m
所以期望的序列是j = m + 1 - i

換句話說,M[i][j] -> M[j][m + 1 - i]

+0

我明白了。謝謝你的解釋。我絕對接受你的答案,如果我有權接受多個答案。 –