Python画雷达扇面探测动图
2026/8/23 22:57:19 网站建设 项目流程

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
from matplotlib.animation import FuncAnimation

# ===================== 配置参数 =====================
# 雷达参数
radar_x, radar_y = 0, 0 # 雷达位置
radar_range = 80 # 雷达最大探测距离
scan_start_angle = 30 # 扫描起始角(度)
scan_end_angle = 120 # 扫描终止角(度)
scan_speed = 2 # 每帧转动角度

# 航迹参数
total_points = 50
# 模拟飞行器航迹(平滑曲线)
t = np.linspace(0, 4 * np.pi, total_points)
track_x = 20 + 12 * t * np.cos(t)
track_y = 20 + 12 * t * np.sin(t)

# ===================== 创建画布 =====================
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(-100, 100)
ax.set_ylim(-100, 100)
ax.set_aspect("equal")
ax.grid(True, alpha=0.3)
ax.set_title("航迹与雷达覆盖动态展示")
ax.set_xlabel("X")
ax.set_ylabel("Y")

# 绘制雷达站点
radar_point, = ax.plot(radar_x, radar_y, "ro", markersize=8, label="雷达站")

# 航迹:完整轨迹线 + 当前位置点
track_line, = ax.plot([], [], "b-", linewidth=1.5, label="历史航迹")
track_now, = ax.plot([], [], "go", markersize=6, label="当前位置")

# 雷达扇形覆盖(Wedge楔形)
wedge = Wedge((radar_x, radar_y), radar_range, scan_start_angle, scan_start_angle,
width=radar_range, color="orange", alpha=0.3)
ax.add_patch(wedge)

ax.legend(loc="upper right")

# ===================== 动画更新函数 =====================
current_scan_angle = scan_start_angle

def update(frame):
global current_scan_angle
# 1. 更新雷达扫描扇形结束角度
current_scan_angle += scan_speed
# 扫描到头后折返
if current_scan_angle > scan_end_angle:
current_scan_angle = scan_start_angle

wedge.set_theta1(scan_start_angle)
wedge.set_theta2(current_scan_angle)

# 2. 更新航迹:绘制到当前帧为止的轨迹
idx = min(frame, total_points - 1)
track_line.set_data(track_x[:idx+1], track_y[:idx+1])
track_now.set_data(track_x[idx], track_y[idx])

return track_line, track_now, wedge

# ===================== 启动动画 =====================
ani = FuncAnimation(
fig, update, frames=150, interval=50, blit=True
)

plt.show()
# 如果需要保存视频,取消下面注释(需要ffmpeg)
# ani.save("radar_track.gif", writer="pillow", fps=20)
运行结果如下:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询