CCF 202206-4 光线追踪 15分代码运行超时怎么办

202206-4 光线追踪 CCF Python
各位征战CCF的友友们,求帮忙看下代码还能再快些嘛?
主要思路是:可以把镜子看做一段线段,求出线段所在直线的表达式y=ax+b,判断光源是否经过这个线段内的点(不含端点),如果是就转向!如直线斜率是1,当方向0的点射到它就会变成方向1

m = int(input())
mirror = {}   #保存镜子信息
def mir(x1,y1,x2,y2):  #求直线表达书
    a = (y2 - y1)/(x2 - x1)
    b = y1 - a * x1
    return a,b

def next(x,y,d):   #定义每个方向如何走
    if d == 0:
        x += 1
    elif d == 1:
        y += 1
    elif d == 2:
        x -= 1
    else:
        y -= 1
    return x,y,d

def trun_d(sl,d):   #定义转向,通过直线斜率和原方向判断
    if sl == 1 and d == 0:
        d = 1
    elif sl == 1 and d == 1:
        d = 0
    elif sl == 1 and d == 2:
        d = 3
    elif sl == 1 and d == 3:
        d = 2
    elif sl == -1 and d == 0:
        d =3
    elif sl == -1 and d == 3:
        d = 0
    elif sl == -1 and d == 1:
        d =2
    elif sl == -1 and d == 2:
        d = 1
    return d


k = 1
for i in range(m):
    op = input().split()
    if op[0] == '1':
        mirror[k] = {}
        x1,y1,x2,y2 = map(int,op[1:5])
        mirror[k]['line'] = [min(x1,x2),max(x1,x2)]
        sl,b = mir(x1,y1,x2,y2)
        mirror[k]['b'] = b
        mirror[k]['sl'] = sl
        mirror[k]['a'] = float(op[5])
    elif op[0] == '2':
        del mirror[int(op[1])]
    else:
        x,y,d = map(int,op[1:4])
        I = float(op[4])
        t = int(op[5])
        while t:
            x, y, d = next(x, y, d)
            for j in mirror.keys():
                if y == (x * mirror[j]['sl'] + mirror[j]['b']) and (x > mirror[j]['line'][0]) and (x < mirror[j]['line'][1]):
                    d = trun_d(mirror[j]['sl'], d)
                    I = mirror[j]['a'] * I
            t -= 1
        if I >= 1:
            print(x,y,int(I))
        else:
            print(0,0,0)
    k += 1

img

写的有点乱,希望大家指正!