欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()


''' 由于毕设文章尚未完成,需要等待论文发表之后再公布第二阶段形成均匀多边形编队的代码 '''
''' 也在研究这个方向的朋友们可以一起交流一下  '''