使用matplotlib绘制动图

主程序如下:

python 复制代码
'''
项目:701项目三分报告
作者:WN
内容:速度障碍法实现
时间:2023年8月26号
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import animation
from utils import *

uav1 = Agent(1, [0, 0])
trace1 = []
uav2 = Agent(2, [40, 40])
uav2.yaw = uav1.yaw + np.pi
trace2 = []

trace = []


for i in range(100):
    uav1.step()
    trace1.append((uav1.pos[0], uav1.pos[1]))
    uav2.step()
    trace2.append((uav2.pos[0], uav2.pos[1]))
    trace.append((uav1.pos[0], uav1.pos[1], uav2.pos[0], uav2.pos[1]))

# plt.xlim(0,40)
# plt.ylim(0,40)
# plt.scatter([x[0] for x in trace1], [x[1] for x in trace1], color='r')
# plt.scatter([x[0] for x in trace2], [x[1] for x in trace2], color='b')
# plt.show()


fig, ax = plt.subplots()
xdata1, ydata1 = [], []
xdata2, ydata2 = [], []

line1, = ax.plot(xdata1, ydata1, 'ro')
line2, = ax.plot(xdata2, ydata2, 'bo')

def init():
    ax.set_xlim(0,40)
    ax.set_ylim(0,40)
    return line1, line2
def update(frame):  # 帧
    print(frame)
    xdata1.append(frame[0])
    ydata1.append(frame[1])
    line1.set_data(xdata1, ydata1)

    xdata2.append(frame[2])
    ydata2.append(frame[3])
    line2.set_data(xdata2, ydata2)
    return line1,line2

ani = animation.FuncAnimation(
    fig=fig,
    func=update,
    frames=trace,
    init_func=init,
    interval=100, # 时间间隔
)
plt.show()
ani.save('1.gif', writer='pillow')

函数库如下:

python 复制代码
'''
作者:WN
内容:速度障碍法实现的主要函数
时间:2023年8月26号
'''
import numpy as np


class Agent(object):
    def __init__(self, ID, pos_0):
        self.id = ID
        self.v = 0.05  # 平台的速度(米/秒)
        self.pos = pos_0  # 平台的初始位置
        self.yaw = np.pi/3  # 平台的航向(0至2pi)
        self.det = 5  # 平台的探测范围
        self.state = 'None'  # 平台的状态(暂为缺省值)
        self.step_num = 0  # 记录平台仿真时间
        self.obs = None  # 记录平台所能观测到的数据

    def Stragey(self):
        '''
        根据智能体得到的观测数据来决策(输入、输出应根据需求具体设计)
        输入: 观测数据、当前位置、探测数据
        输出:新的速度
        '''
        pass

    def Pos_update(self):
        '''
        输入:当前位置、速度
        输出:更新后的位置
        '''
        self.pos[0] += self.v * np.cos(self.yaw)
        self.pos[1] += self.v * np.sin(self.yaw)
        pass

    def step(self):
        self.step_num += 1

        #########根据探测到的数据和策略解算新的位置、速度
        # self.v = self.Stragey()
        self.Pos_update()
相关推荐
烟锁池塘柳02 天前
【已解决,亲测有效】解决使用Python Matplotlib库绘制图表中出现中文乱码(中文显示为框)的问题的方法
开发语言·python·matplotlib
浪浪山齐天大圣3 天前
python数据可视化之Matplotlib(8)-Matplotlib样式系统深度解析:从入门到企业级应用
python·matplotlib·数据可视化
伊织code3 天前
Matplotlib 2 -绘图、统计、网格、3D
3d·matplotlib·绘图
胡耀超3 天前
7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)
python·信息可视化·plotly·数据挖掘·数据分析·matplotlib·seaborn
摩羯座-185690305943 天前
Python数据可视化基础:使用Matplotlib绘制图表
大数据·python·信息可视化·matplotlib
eqwaak05 天前
Matplotlib 动态显示详解:技术深度与创新思考
网络·python·网络协议·tcp/ip·语言模型·matplotlib
深兰科技13 天前
柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
人工智能·beautifulsoup·numpy·pyqt·matplotlib·pygame·深兰科技
hAnGWS13 天前
Python可视化与交互-matplotlib库
python·交互·matplotlib
WSSWWWSSW17 天前
Seaborn数据可视化实战:Seaborn数据可视化实战入门
python·信息可视化·数据挖掘·数据分析·matplotlib·seaborn
fsnine19 天前
数据可视化——matplotlib库
信息可视化·matplotlib