Python: повернуть массив mxn на произвольный угол - PullRequest
0 голосов
/ 31 января 2019

У меня есть матрица, заполненная нулями, и прямоугольник, заполненный единицами в области этой матрицы, например,

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 голосов
/ 31 января 2019

С математической точки зрения вы могли бы решить проблему, преобразовав декартовы координаты в полярные координаты относительно центра прямоугольника.

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

(Обратите внимание, что x и y должны быть относительно центра вращения). С полярными координатами вращение не представляет проблем, так как вам просто нужно добавить желаемый угол к phi и затем преобразовать обратно.в декартовы координаты.

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

(И снова, результирующие координаты будут относительно центра вращения, поэтому вам нужно добавить их к декартовому вектору, который указывает на центр)

0 голосов
/ 31 января 2019

Как насчет использования 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()

Конечно, это примерно в середине изображения.Если вы хотите повернуть вокруг центра прямоугольника, я бы предложил перевести его в середину изображения, повернуть, а затем перевести обратно.

...