Python:将mxn数组旋转任意角度

Python: Rotate mxn array to an arbitrary angle

我有一个用 0 填充的矩阵和一个用 1 填充的矩形,就像这样

我想像这样将矩形旋转到任意角度(在本例中为 30°)

import numpy as np
import matplotlib.pyplot as plt

n_x = 200
n_y = 200
data = np.zeros((n_x, n_y))
data[20:50, 20:40] = 1

plt.imshow(data)

plt.show()

使用 scipy 怎么样?

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import  rotate

n_x = 200
n_y = 200
data = np.zeros((n_x, n_y))
data[20:50, 20:40] = 1

angle = 30
data = rotate(data, angle) 

plt.imshow(data)

plt.show()

当然这是在图像的中间。如果你想围绕矩形的中心旋转,我建议将它平移到图像的中间,旋转它然后再平移回来。

从数学的角度来看,您可以通过转换来解决问题 将这些的笛卡尔坐标转换为相对于矩形中心的极坐标。

r = sqrt(x²+y²)
phi = atan2(y,x)

(注意x和y要相对于旋转中心) 使用极坐标旋转没有问题,因为您只需将所需的角度添加到 phi,然后再转换回笛卡尔坐标。

x = r*cos(phi)
y = r*sin(phi)

(同样,生成的坐标将相对于旋转中心,因此您需要将它们添加到指向中心的笛卡尔向量)