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

时间:2019-01-31 16:36:57

标签: python python-3.x linear-algebra

在矩阵的某个区域上,我有一个用零填充的矩阵和一个用1填充的矩形,像这样

enter image description here

我想像这样将矩形旋转到任意角度(在这种情况下为30°)

enter image description here

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()

2 个答案:

答案 0 :(得分:1)

使用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()

当然,这是在图像的中间。如果要围绕矩形的中心旋转,建议将其平移到图像的中间,旋转然后再平移回去。

答案 1 :(得分:0)

从数学的角度来看,您可以通过转换来解决问题 的直角坐标变成相对于矩形中心的极坐标。

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

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

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

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