matplotlib绘动态图
程序员文章站
2022-03-21 17:38:38
...
模拟多智能体编队算法的matplotlib绘图基础框架
'''高度一致绘图'''
‘’‘在笛卡尔坐标系下,只考虑高度问题,高度一致即是直线上分布的点缩聚成一点,其次总路径最短的位置在代码中体现’‘’
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
NUM=10 #无人机个体数量
point_list = [] #坐标列表[[1,2],[2,4]]之类的
a=np.random.uniform(0,100,size=NUM) #随机生成x坐标
# b=np.random.uniform(0,100,size=NUM) #随机生成y坐标
b=[50]*NUM #固定y坐标
for i in range(NUM):
point_list.append([a[i],b[i]])
"""设置画布和坐标轴"""
fig,ax=plt.subplots()
ax.set_ylim(0,100)
ax.set_xlim(0,100)
class Point():
def __init__(self,myposition,ax):
self.myposition=myposition
self.dot=ax.plot([myposition[0]],[myposition[1]],'bo')[0]
def gen_dot(self,aim):
distance=aim-self.myposition[0]
x = np.linspace(self.myposition, aim, abs(int(distance))) #每帧移动相同距离实现速度一致
y = 50
for each in x:
yield [each, y]
def update_dot(self,newdot):
self.dot.set_data(newdot[0], newdot[1])
return self.dot
def move(self,aim):
return animation.FuncAnimation(fig, self.update_dot, frames=self.gen_dot(aim), interval=100)
""" 通过字典实例化多个对象 """
obj_dict = {}
for i in range(NUM):
obj_dict['R'+str(i)] = Point(myposition=point_list[i],ax=ax)
'''计算最小路径目标点'''
a.sort()
if NUM%2 == 1:
aim=a[int(NUM/2)]
else:
aim = a[int(NUM/2)]
ax.plot([aim],[50],'ko',alpha=1)
draw_list=[]
for i in range(NUM):
R = obj_dict['R'+str(i)]
draw_list.append(R.move(aim=aim))
plt.show()
''' 由于毕设文章尚未完成,需要等待论文发表之后再公布第二阶段形成均匀多边形编队的代码 '''
''' 也在研究这个方向的朋友们可以一起交流一下 '''