在矩阵的某个区域上,我有一个用零填充的矩阵和一个用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()
答案 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)
(同样,生成的坐标将相对于旋转中心,因此您需要将其添加到指向该中心的笛卡尔向量中)