Sympy模块运行非常缓慢

时间:2019-05-25 04:55:09

标签: python performance geometry sympy

给出一个长度和一个点(x,y)的列表,我想查找以(a,b)为中心且半径为25的圆是否与任何线相交。这些线都以点(x,y)为中心,具有长度列表中相应索引的长度,并且所有相邻的线都具有相同的“角度”(所有线在角度方面均等距) / p>

我已经尝试过使用Sympy,但是不幸的是,它非常慢。以前,我的游戏以50-60 fps的速度运行,但现在以0.3-0.5 fps的速度运行。不幸的是,我不知道是什么导致了所有的延迟,所以我将展示整个功能:

# the point where the lines are centered around is represented by pl.x,pl.y
#sympy is imported as sym
def shotcheck(self,lines):
        x,y = self.x,self.y #x and y represent the center of the circle
        c = sym.Circle(sym.Point(x,y,evaluate=False),25)
        diff = 2*math.pi/len(lines)
        direction = math.acos((x-pl.x)/hypot((pl.x-x),(pl.y-y)))
        if y < pl.y:
            direction = 2*math.pi-direction
        dfind = direction -0.005
        lowline,highline = math.floor(dfind/diff),math.ceil(dfind/diff)
        lline = sym.Segment(sym.Point(pl.x,pl.y,evaluate=False),sym.Point(pl.x+lines[lowline]*math.cos(a*lowline+0.005),pl.y+lines[lowline]*math.sin(a*lowline+0.005),evaluate=False))
        hline = sym.Segment(sym.Point(pl.x,pl.y,evaluate=False),sym.Point(pl.x+lines[highline]*math.cos(a*highline+0.005),pl.y+lines[highline]*math.sin(a*highline+0.005),evaluate=False))
        if len(sym.intersection(c,lline)) == 0 and len(sym.intersection(c,hline)) == 0:
            return False
        else:
            return True #Returns True if intersecting

我希望它运行得很快,但是它会完全降低fps。 我该怎么做才能解决此问题? 编辑:我发现滞后是由sym.intersection引起的。我如何使其更快?

0 个答案:

没有答案