矩阵旋转
时间: 2023-06-21 11:16:42 浏览: 44
矩阵旋转可以通过矩阵乘法来实现。假设要将一个二维向量 $(x,y)$ 逆时针旋转 $\theta$ 角度,可以将其表示为一个 $2\times2$ 的旋转矩阵 $R_{\theta}$ 与一个列向量 $\begin{bmatrix}x\\y\end{bmatrix}$ 的乘积:
$$\begin{bmatrix}x'\\y'\end{bmatrix} = R_{\theta}\begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}$$
其中,$x'$ 和 $y'$ 分别是旋转后的坐标。
对于一个 $n\times n$ 的矩阵 $A$,可以通过循环每个元素,并将其坐标 $(i,j)$ 旋转后的位置 $(i',j')$ 等于 $R_{\theta}\begin{bmatrix}i\\j\end{bmatrix}$,然后将其放到新的位置 $(i',j')$,得到旋转后的矩阵 $A'$。
下面是一个 Python 代码示例:
```python
import numpy as np
def rotate_matrix(A, theta):
n = A.shape[0]
R = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
A_rotated = np.zeros((n, n))
for i in range(n):
for j in range(n):
v = R @ np.array([i, j])
i_rotated, j_rotated = int(round(v[0])), int(round(v[1]))
if i_rotated >= 0 and i_rotated < n and j_rotated >= 0 and j_rotated < n:
A_rotated[i_rotated, j_rotated] = A[i, j]
return A_rotated
```
其中,`A` 是原始矩阵,`theta` 是旋转角度。函数返回旋转后的矩阵 `A_rotated`。注意,这里使用了 `np.round()` 函数来将浮点数四舍五入到最近的整数。