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

C++ 在C/C+中旋转后在给定矩阵中的x,y处查找元素+;?,c++,c,algorithm,matrix,graph-theory,C++,C,Algorithm,Matrix,Graph Theory,在旋转整个矩阵而不执行矩阵旋转后,如何在给定矩阵中找到索引x,y处的元素 这意味着我只对坐标感兴趣,我不想对total矩阵执行total运算,而只是在任何索引处获取元素 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*

在旋转整个矩阵而不执行矩阵旋转后,如何在给定矩阵中找到索引x,y处的元素

这意味着我只对坐标感兴趣,我不想对total矩阵执行total运算,而只是在任何索引处获取元素

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. 例子: 假设给出了一个矩阵 1 2 3 4 5 6 7 8 9 把矩阵旋转90度后,我想找到1,1的元素。 答案应该是“7”。 **注**:未对总矩阵执行旋转。 如果我想要元素为1,2,那么答案应该是“4”。 我希望我清楚地传达了这个问题,如果您知道这个问题的解决方案或算法,请帮助。 非常感谢。
假设你有一个
mxn矩阵
,你对旋转后
m[i][j]
的位置感兴趣

因此,顺时针旋转90度后,
M[i][j]->M[j][M+1-i]。
在您的示例中,
M[3][1]在旋转后将是M[1][3+1-3]。


希望这能解决你的问题

假设你有一个
mxn矩阵
,你对旋转后
m[i][j]
的位置感兴趣

// 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度后,
M[i][j]->M[j][M+1-i]。
在您的示例中,
M[3][1]在旋转后将是M[1][3+1-3]。

希望这能解决你的问题

//使用x和y的正确索引进行90度旋转(从0开始,而不是从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];
}
//假设平方矩阵 模板 T elemAfter90degRot(内部x、内部y、T[尺寸][尺寸]垫){ int j=y; int i=尺寸-1-x; 返回垫[i][j]; }
我认为这应该可以实现正方形矩阵的90度旋转

//对于90度旋转,使用x和y的正确索引(从0开始,而不是从1开始)
//假设平方矩阵
模板
T elemAfter90degRot(内部x、内部y、T[尺寸][尺寸]垫){
int j=y;
int i=尺寸-1-x;
返回垫[i][j];
}
我认为这应该可以实现正方形矩阵90度旋转的技巧

您要映射:

(x,y) -> (x', y')
假设如下:1

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

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

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

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

您要映射:

(x,y) -> (x', y')
假设如下:1

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

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

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


解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]

这里有一种解决问题的方法(而不是使用其他人的解决方案)

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

因此,问题是旋转后元素的列索引

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

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

那么您想要查找元素以执行旋转的函数吗?或者只是一个计算一个元素的位置的函数?无论哪种方式,在某个点上,您都需要计算旋转度。因此,元素1,1将是5,元素0,0将是7,索引从0开始,而不是1以矩阵旋转的相反方向旋转坐标。因此,您希望查找元素的函数执行旋转吗?或者只是一个计算一个元素的位置的函数?无论哪种方法,在某一点上,你都需要计算旋转度。因此元素1,1是5,元素0,0是7,索引从0开始,而不是1以矩阵旋转的相反方向旋转坐标。这对于OP基于1的索引是正确的。对于基于0的索引M[i][j]->M[j][M-i],我感兴趣的是在旋转后找到M[i][j]处的元素。我现在能找到它了。谢谢你的回答。这对于OP基于1的指数是正确的。对于基于0的索引M[i][j]->M[j][M-i],我感兴趣的是在旋转后找到M[i][j]处的元素。我现在能找到它了。谢谢你的回答,我知道了。谢谢你的解释。如果我有权接受多个答案,我肯定会接受你的答案。我明白了。谢谢你的解释。如果我有权接受多个答案,我肯定会接受你的答案。我认为这里有一个错误,
I
j
被交换。我认为这里有一个错误,
I
j
被交换。
1 = a + bw + c
1 = d + ew + f
1 = aw + bh + c
h = dw = eH + f