在 C/C++ 中旋转后在给定矩阵中的 x,y 处查找元素?

Finding element at x,y in a given matrix after rotation in 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.  

假设你有一个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.

希望这能解决您的问题。

// 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 度的问题

您要映射:

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

假设如下:1

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

现在,(1, 1) 映射到 (W, 1)2

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

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

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

and (W, H) 映射到 (1, H)4

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

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

这是解决问题的一种方法(除了使用其他人的解决方案)。

很明显每个元素的列索引是旋转后该元素的行索引(至少,我希望这是清楚的)。

所以,问题是旋转后元素的列索引。

第一行将成为最后一列,第二行将成为倒数第二列,依此类推,直到最后一行成为第一列。

一种查看方式是我们有(行)序列 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].