我试图写一个函数,rotateByX
,它接受两个参数,一个4x4矩阵和一个表示旋转矩阵度的数字。度是90度、180度、27度、360度……等等......如果输入的度数为正,则矩阵顺时针向右旋转。如果它是负的(例如-90,-180…),则矩阵逆时针向左旋转。我能够解决一个类似的问题,我只需要顺时针旋转90度。我在这里的代码中使用了这个函数,并创建了另一个函数,将逆时针旋转90度。因此,我使用这两个函数旋转矩阵,根据度的输入。
我的代码:
def rotate90_Counter(m):
return [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]
def rotateByX(m,X):
rotations = (X//90)%4
if X >= 0:
for p in range(rotations):
m= rotate90_clockwise(m)
elif X < 0:
for s in range(rotations):
m= rotate_90_Counter(m)
return m
m = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
rotateByX(m, -90)
当前仅当输入度X为正数时才有效。所以90、180、270……它旋转得很漂亮。但是对于负X,它向右旋转(顺时针)而不是向左。
rotateByX
计算一个数字rotations
,该数字为顺时针旋转90度的次数,以实现顺时针旋转X
度(等于逆时针旋转-X
度)
所以总是顺时针旋转rotations
次。永远不要逆时针旋转。删除if X >= 0
/elif X < 0
,X
的相关信息已经包含在rotations
中。
def rotateByX(m, X):
rotations = (X // 90) % 4
for p in range(rotations):
m = rotate90_clockwise(m)
return m