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)
(同样,生成的坐标将相对于旋转中心,因此您需要将它们添加到指向中心的笛卡尔向量)
我有一个用 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)
(同样,生成的坐标将相对于旋转中心,因此您需要将它们添加到指向中心的笛卡尔向量)