You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现矩阵指定角度顺/逆时针旋转函数的bug修复

矩阵旋转函数负角度失效问题排查

问题背景

我正在尝试编写一个名为rotateByX的函数,该函数接收两个参数:一个4x4矩阵,以及代表矩阵旋转角度的数值。传入的角度为90、180、270、360等90的整数倍数值:若传入角度为正,矩阵沿顺时针方向向右旋转;若传入角度为负(如-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等正角度时旋转结果完全符合预期;但传入负角度时,矩阵未按预期沿逆时针方向向左旋转,反而沿顺时针方向向右旋转。


问题根因

  • 旋转次数计算逻辑错误:Python整数除法对负数做向下取整,-90//90的运算结果是-1,再对4取模(-1) % 4得到结果3。也就是说传入-90度时,代码算出的rotations值为3,执行3次逆时针旋转的效果等同于1次顺时针旋转,自然和预期结果相反。
  • 函数名拼写不匹配:自定义的逆时针旋转函数名为rotate90_Counter,负角度分支中调用的却是rotate_90_Counter,实际运行时会直接抛出名称错误,需要统一命名。

修复方案

  1. 拆分正负角度的旋转次数计算逻辑:正角度沿用原有顺时针旋转次数计算方式,负角度单独计算逆时针旋转次数,不再共用同一套取模公式。
  2. 统一逆时针旋转函数的命名,消除名称错误。

修复后的可运行代码如下:

# 注:rotate90_clockwise为你已实现的顺时针旋转函数,此处补全通用实现用于测试
def rotate90_clockwise(m):
    n = len(m)
    return [[m[n-1-j][i] for j in range(n)] for i in range(n)]

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):
    if X >= 0:
        rotations = (X // 90) % 4
        for _ in range(rotations):
            m = rotate90_clockwise(m)
    else:
        # 负角度转成正数计算逆时针旋转次数
        rotations = (-X // 90) % 4
        for _ in range(rotations):
            m = rotate90_Counter(m)
    return m
        
m = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
print(rotateByX(m, -90))

逻辑验证:传入-90度时旋转次数计算为1,仅执行1次逆时针旋转,结果符合预期;传入-180度时旋转2次,和顺时针旋转2次效果一致;传入-270度时旋转3次,等效于顺时针旋转1次,所有角度场景逻辑自洽。


内容的提问来源于stack exchange,提问作者Kev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 21:21:26