本篇博客搬运自个人简书链接戳我,欢迎大家关注。
drawnow
函数。drawnow
这样的函数。 matplotlib.pyplot.ion
time
模块计算每一步的耗时,直观地表现这一现象。 def Method(point):
es_time = np.zeros([point])
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.axis("equal") #设置图像显示的时候XY轴比例
ax.set_xlabel('Horizontal Position')
ax.set_ylabel('Vertical Position')
ax.set_title('Vessel trajectory')
plt.grid(True) #添加网格
plt.ion() #interactive mode on
IniObsX=0000
IniObsY=4000
IniObsAngle=135
IniObsSpeed=10*math.sqrt(2) #米/秒
print('开始仿真')
for t in range(point):
t0 = time.time()
#障碍物船只轨迹
obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t
obsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t
ax.scatter(obsX,obsY,c='b',marker='.') #散点图
#下面的图,两船的距离
plt.pause(0.001)
es_time[t] = 1000*(time.time() - t0)
return es_time
ax.scatter(obsX,obsY,c='b',marker='.')
造成的。这段代码每一循环一次就新画一条曲线,而不清除之前的曲线,这就必然导致越往后循环所花费的CPU资源内存资源越多,最终机器卡死。ax.scatter(obsX,obsY,c='b',marker='.')
前加上清除代码plt.cla()
。即: plt.cla()
ax.plot(obsX,obsY,'-g',marker='*') #散点图
def Method_Improve(point):
def initial(ax):
ax.axis("equal") #设置图像显示的时候XY轴比例
ax.set_xlabel('Horizontal Position')
ax.set_ylabel('Vertical Position')
ax.set_title('Vessel trajectory')
plt.grid(True) #添加网格
return ax
es_time = np.zeros([point])
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax = initial(ax)
plt.ion() #interactive mode on
IniObsX=0000
IniObsY=4000
IniObsAngle=135
IniObsSpeed=10*math.sqrt(2) #米/秒
print('开始仿真')
obsX = [0,]
obsY = [4000,]
for t in range(point):
t0 = time.time()
#障碍物船只轨迹
obsX.append(IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t)
obsY.append(IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t)
plt.cla()
ax = initial(ax)
ax.plot(obsX,obsY,'-g',marker='*') #散点图
#下面的图,两船的距离
plt.pause(0.001)
es_time[t] = 1000*(time.time() - t0)
return es_time
line.set_xdata(obsX)
line.set_ydata(obsY)
完整代码:
def ImprovedMethod_Improve(point):
es_time = np.zeros([point])
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.set_xlabel('Horizontal Position')
ax.set_ylabel('Vertical Position')
ax.set_title('Vessel trajectory')
line = ax.plot([0,0],[4000,4000],'-g',marker='*')[0]
plt.grid(True) #添加网格
plt.ion() #interactive mode on
IniObsX=0000
IniObsY=4000
IniObsAngle=135
IniObsSpeed=10*math.sqrt(2) #米/秒
print('开始仿真')
obsX = [0,]
obsY = [4000,]
for t in range(point):
t0 = time.time()
#障碍物船只轨迹
obsX.append(IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t)
obsY.append(IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t)
line.set_xdata(obsX)
line.set_ydata(obsY)
ax.set_xlim([-200,10*point+200])
ax.set_ylim([3800-10*point,4200])
#下面的图,两船的距离
plt.pause(0.001)
es_time[t] = 1000*(time.time() - t0)
return es_time