当前位置: 首页 > news >正文

使用matplotlib绘制动图

主程序如下:

'''
项目: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,line2ani = animation.FuncAnimation(fig=fig,func=update,frames=trace,init_func=init,interval=100, # 时间间隔
)
plt.show()
ani.save('1.gif', writer='pillow')

函数库如下:

'''
作者:WN
内容:速度障碍法实现的主要函数
时间:2023年8月26号
'''
import numpy as npclass Agent(object):def __init__(self, ID, pos_0):self.id = IDself.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):'''根据智能体得到的观测数据来决策(输入、输出应根据需求具体设计)输入: 观测数据、当前位置、探测数据输出:新的速度'''passdef Pos_update(self):'''输入:当前位置、速度输出:更新后的位置'''self.pos[0] += self.v * np.cos(self.yaw)self.pos[1] += self.v * np.sin(self.yaw)passdef step(self):self.step_num += 1#########根据探测到的数据和策略解算新的位置、速度# self.v = self.Stragey()self.Pos_update()
http://www.lryc.cn/news/141951.html

相关文章:

  • 加油站ai视觉分析检测预警
  • Docker构建镜像
  • 【太多网工对NAT还存在这4种误解!你是其中一个吗?】
  • React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别
  • Unity——后期处理举例
  • PMP P-05 Quality Management
  • vue中css修改滚动条样式
  • uniapp的H5实现图片长按保存
  • Java 8:Stream API 流式操作(学习)
  • 04_20 直接使用代码 创建内核模块获取物理内存信息
  • <C++> STL_list
  • 聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化
  • C++笔记之设计模式:setter函数、依赖注入
  • Spring MVC详解
  • 谷歌公开.zip域名,应采取哪些措施应对可能的安全风险?
  • css3滤镜属性filter让网页变黑白
  • C++教程 - How to C++系列专栏第5篇
  • Vue2向Vue3过度核心技术插槽
  • vite配置electron、ElementPlus或者AntDesignVue
  • 时序分解 | MATLAB实现基于SVD奇异值分解的信号分解分量可视化
  • 强化学习系列--时序差分学习方法(SARSA算法)
  • 深度学习9:简单理解生成对抗网络原理
  • adb shell setprop 、开发者选项
  • 性能测试面试问题,一周拿3个offer不嫌多
  • Android Bitmap压缩
  • 不同子网络中的通信过程
  • Ubuntu Touch OTA-2 推出,支持 Fairphone 3 和 F(x)tec Pro1 X
  • 【网络】数据链路层——MAC帧协议 | ARP协议
  • 【Spring Boot】Spring Boot自动加载机制:简化应用程序的启动
  • centos7搭建apache作为文件站后,其他人无法访问解决办法