给出一个长度和一个点(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引起的。我如何使其更快?