如何在GUI任意位置放置文本实现雷达屏方位距离标注
基于Pygame的雷达刻度盘标注实现方案
Pygame完全可以满足你的需求,核心是通过极坐标与笛卡尔坐标转换计算标注位置,配合Pygame的文本渲染接口即可实现任意方位、距离的文本标注。以下是可直接运行的最小实现示例:
import pygame import math # 初始化Pygame pygame.init() # 窗口设置 WIDTH, HEIGHT = 800, 800 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("雷达刻度盘示例") # 字体设置,支持中文可替换为系统中文字体路径 font = pygame.font.SysFont("arial", 18) # 雷达核心参数 CENTER_X, CENTER_Y = WIDTH // 2, HEIGHT // 2 RADAR_RADIUS = 300 AZIMUTH_STEP = 30 # 方位刻度间隔,单位° RANGE_STEP = 50 # 距离刻度间隔,单位像素(可映射为实际距离如海里、公里) TEXT_OFFSET = 20 # 标注文本与径向线末端的偏移距离,避免重叠 running = True while running: screen.fill((0, 20, 0)) # 雷达屏暗绿色背景 # 处理退出事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 1. 绘制距离圈(同心圆)与距离标注 for r in range(RANGE_STEP, RADAR_RADIUS + RANGE_STEP, RANGE_STEP): pygame.draw.circle(screen, (0, 255, 0), (CENTER_X, CENTER_Y), r, 1) # 标注距离数值,可按需调整标注位置 range_text = font.render(str(r), True, (0, 255, 0)) screen.blit(range_text, (CENTER_X + r + 5, CENTER_Y)) # 2. 绘制方位径向线与方位标注 for angle_deg in range(0, 360, AZIMUTH_STEP): # 角度转弧度,调整为正北为0°顺时针旋转 angle_rad = math.radians(angle_deg - 90) # 计算径向线终点坐标 end_x = CENTER_X + RADAR_RADIUS * math.cos(angle_rad) end_y = CENTER_Y + RADAR_RADIUS * math.sin(angle_rad) # 绘制径向线 pygame.draw.line(screen, (0, 255, 0), (CENTER_X, CENTER_Y), (end_x, end_y), 1) # 计算标注文本的位置(径向线外侧偏移) text_x = CENTER_X + (RADAR_RADIUS + TEXT_OFFSET) * math.cos(angle_rad) text_y = CENTER_Y + (RADAR_RADIUS + TEXT_OFFSET) * math.sin(angle_rad) # 渲染方位文本 azimuth_text = font.render(f"{angle_deg}°", True, (0, 255, 0)) # 让文本中心对齐计算出的坐标 text_rect = azimuth_text.get_rect(center=(text_x, text_y)) screen.blit(azimuth_text, text_rect) pygame.display.flip() pygame.quit()
关键调整说明
- 若要修改雷达盘的位置,直接修改
CENTER_X、CENTER_Y参数即可,所有刻度、标注会自动适配 - 若需要非等间隔的特殊刻度,只需修改
range()的遍历逻辑为自定义的角度、距离列表 - 文本的样式、颜色、偏移量可根据显示需求自行调整,也支持渲染自定义格式的数值(如将像素距离映射为实际公里/海里数值)
内容的提问来源于stack exchange,提问作者user121170
相关产品推荐
相关产品推荐

