Итак, у меня есть упражнение, чтобы выполнить функцию, которая создает изображение типа оптической иллюзии, например:
Изображение должен иметь размеры 100x100, и метод должен получить угол между 0 и 360 градусами, который является углом между каждым сектором (который, я думаю, они означают угол между каждой линией).
Я пытался сделать это, используя функция line_aa из skimage.draw
. Что я делаю, так это сначала конвертирую угол в радианы. Затем я создаю переменные x
и negx
, которые являются крайними точками каждой линии. Затем я делаю некоторое время l oop, пока x
не достигнет края изображения. В то время как l oop я вычисляю противоположную сторону угла (расстояние между линиями), рисую линию от negx
до x
, а затем увеличиваю две переменные с помощью значения противоположной стороны, вычисленного ранее. Наконец я увеличиваю угол, чтобы нарисовать следующую линию. Затем я делаю то же самое для оси y.
def makeImg(ang):
image = np.zeros((100,100), np.uint8)
ang*=np.pi/180
origAng=ang
adj=50
x=50
negx=50
while(x<99):
opos=adj*np.tan(ang)
l,c,val = line_aa(negx,99,x,0)
image[l,c] = val*255
l,c,val = line_aa(x,99,negx,0)
image[l,c] = val*255
negx-=int(opos)
x+=int(opos)
ang+=origAng
ang=origAng
y=50
negy=50
while(y<99):
opos=adj*np.tan(ang)
l,c,val = line_aa(0,negy,99,y)
image[l,c] = val*255
l,c,val = line_aa(0,y,99,negy)
image[l,c] = val*255
negy-=int(opos)
y+=int(opos)
ang+=origAng
cv2.imshow('img',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
, что делает что-то вроде этого (я изменил значения, чтобы сделать изображение размером 500x500, чтобы его было легче видеть):
Я знаю, что эта функция немного (много) изношена, но это было единственное, что я мог придумать. Если бы кто-то мог помочь, я был бы очень признателен!