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))