# HG changeset patch # User Laman # Date 2018-06-26 22:29:50 # Node ID fba1a2015cf3b90b496d82a9b260e706d48e0981 # Parent e79c5818edfd7e47165020e59c86817497510877 rotace dílků diff --git a/pieces.py b/pieces.py new file mode 100644 --- /dev/null +++ b/pieces.py @@ -0,0 +1,69 @@ +import numpy as np + + +board=[[0]*4 for r in range(3)] +steamboat=[[0,0,0],[1,1,1],[0,1,0]] + + +def rotate(obj,axis,multiple): + """[ # z + [[1,2,3], # y,x + [4,5,6]], + + [[7,8,9], + [10,11,12]] + ]""" + matrices=[ + np.array([[1,0,0],[0,0,-1],[0,1,0]]), + np.array([[0,0,1],[0,1,0],[-1,0,0]]), + np.array([[0,-1,0],[1,0,0],[0,0,1]]) + ] + m=1 + for i in range(multiple): m=np.dot(m,matrices[axis]) + + shape=np.array(obj.shape) + shape_=abs(np.dot(shape,m)) + middle=(shape-1)/2 + middle_=(shape_-1)/2 + res=np.zeros(shape_) + + for (z,plane) in enumerate(obj): + for (y,row) in enumerate(plane): + for (x,item) in enumerate(row): + point=np.array([z,y,x]) + point_=np.dot(point-middle,m)+middle_ + res[tuple(map(int,point_))]=item + + return res + + +def fits(board,piece,offset): + (dz,dy,dx)=offset + res=[] + + for (z,plane) in enumerate(piece): + for (y,row) in enumerate(plane): + for (x,item) in enumerate(row): + if item==0: continue + coords=(z+dz,y+dy,x+dx) + if board[coords]: return None + res.append(coords) + return res + + +if __name__=="__main__": + # for r in range(-2,3): + # for c in range(-2,4): + # x=fits(board,steamboat,(r,c)) + # if x: print((r,c),x) + + # print(rotZ([[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,0,0,0]])) + + arr=np.array([ # z + [[1,2,3], # y,x + [4,5,6]], + + [[7,8,9], + [10,11,12]] + ]) + print(rotate(arr,2,4))