QPainter绘制雷达界面

news2024/9/29 17:28:31

文章目录

  • 功能实现
  • 定义的结构体
  • 定义的函数
  • 效果图
  • gitee源码链接

功能实现

相较于上一版,这一版添加的功能有:
1、自适应窗口
2、扫描方式(圆周扫描、扇形扫描(指定起始角度和结束角度))
3、扫描方向(顺时针/逆时针)
4、目标点的批号
5、航迹线的绘制
6、方位,量程绘制
7、鼠标左键点击显示当前点相对于圆心的距离和方位
8、鼠标滚轮放大缩小。

9、封装接口。

定义的结构体

//枚举,扫描方式
enum ScanModeEnum{
    /// 圆周扫描
    CircleScan = 0,
    // 扇形扫描
    SectorScan
};
//枚举,扫描方向
enum ScanDirectionEnum{
    ClockWize = 0,                    //顺时针扫描
    AntiClockWize                   //逆时针扫描
};

//目标信息
struct  TargetInfo
{
    std::string sTargetId;          //批号
    std::string sTOA ;              //到达时间
    double dAzimuth ;               //方位
    double dPitch  ;                //俯仰
    double dDistance;               //距离
    double dFrequency ;             //射频
    double dPulseWidth ;            //脉宽
    double dPulseAmplitude ;       //脉幅(0.5-4。5)
    double dPRI ;                   //脉冲重复周期
    double dRCS ;                   //目标反射面积
    int  nAttr;                     //目标属性,0:我方;1:敌方;2:中立;3:不明

};

定义的函数

//----------------------------------------------------
//  函数名称:Start
//  作用:开启雷达扫描定时器
//  参数:参数一:int类型,表示定时器间隔,默认为500ms
//-----------------------------------------------------
void Start(int nScanPeriod = 500);

//----------------------------------------------------
//  函数名称:Stop
//  作用:关闭雷达扫描定时器
//  参数:无参数
//-----------------------------------------------------
void Stop();

//----------------------------------------------------
//  函数名称:Init
//  作用:初始化雷达扫描基本数据
//  参数:参数一:int类型,表示最大探测距离,即雷达扫描图半径,默认300
//        参数二:int类型,表示等分数,即雷达扫描图圈数,默认5圈
//        参数三:int类型,扫描周期,默认500毫秒更新一次
//        参数四:int类型,扫描波束宽度,默认为10度
//        参数五:bool类型,是否显示轨迹,true表示显示轨迹
//-----------------------------------------------------
void Init(int nMaxDetectionDistance = 300,int nEqualParts = 5,int nScanPeriod = 500,
          int nBeamWidth = 10,bool bShowTrack = false);

//----------------------------------------------------
//  函数名称:SetShowTrack
//  作用:设置是否显示航迹(一个目标的各个坐标点之间的连线成为航迹)
//  参数:参数一:bool类型,是否显示轨迹,true表示显示轨迹
//-----------------------------------------------------
void SetShowTrack(bool bShowTrack = false);

//----------------------------------------------------
//  函数名称:SetScanPeriod
//  作用:设置扫描周期,停止-设置扫描周期-开始
//  参数:参数一:int类型,默认为500ms
//-----------------------------------------------------
void SetScanPeriod(int nScanPeriod = 500);

//----------------------------------------------------
//  函数名称:SetScanParams
//  作用:设置扫描参数 停止-设置扫描参数-开始
//  参数:参数一:ScanDirectionEnum类型,扫描方式
//        参数二:ScanModeEnum类型,扫描方向
//        参数三:int类型,扫描波束宽度,默认为10度
//        参数四:int类型,起始角,默认从0度开始
//        参数五:int类型,结束角,默认360度结束
//-----------------------------------------------------
void SetScanParams(ScanDirectionEnum scanDirection = ClockWize,ScanModeEnum scanMode = CircleScan,
                   int nBeamWidth = 10,int nStartAngle = 0,int nEndAngle = 360);

//----------------------------------------------------
//  函数名称:SetData
//  作用:设置单点坐标数据
//  参数:参数一:TargetInfo类型
//-----------------------------------------------------
void SetData(TargetInfo ti);

//----------------------------------------------------
//  函数名称:SetData
//  作用:设置多点坐标数据
//  参数:参数一:std::vector<TargetInfo>类型
//-----------------------------------------------------
void SetData(std::vector<TargetInfo>& ti);

//----------------------------------------------------
//  函数名称:SetColor
//  作用:设置航迹线颜色
//  参数:颜色的rgb数值
//-----------------------------------------------------
void SetColor(int r, int g, int b);

效果图

扫描方式:圆周扫描

扫描方向:顺时针

显示目标航迹线,目标批号

在这里插入图片描述目标消失

在这里插入图片描述
扫描方式:扇形扫描

扫描方向:无(扇形扫描没有顺时针或逆时针)

扫描波束宽度:10度

扫描范围:0~90度

在这里插入图片描述
目标消失

在这里插入图片描述鼠标左键点击显示当前位置相对于圆心的距离和方位

在这里插入图片描述

gitee源码链接

https://gitee.com/hnSVN/radar_scanning_project

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WITH AS 的 sql语法是啥意思

WITH t1 AS ( select * from my_table_1 where age >30 ), t2 AS ( select * from my_table_2 where sex M ) select * from t1 inner join t2 on t1.id t2.t_id;WITH AS 的 sql语法是啥意思&#xff1f; WITH和AS是SQL语句中的关键字&#xff0c;用于创建临时命名的查询…

hcip——路由策略

要求&#xff1a; 基础配置 AR1 [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24[R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip add 14.0.0.1 24[R1]int loop0 [R1-LoopBack0]ip add 1.1.1.1 24[R1]rip 1 [R1-rip-1]vers 2 [R1-rip-1]net…

RS485/RS232自由转ETHERNET/IP网关profinet和ethernet区别

你是否曾经遇到过这样的问题&#xff1a;如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢&#xff1f;捷米的JM-EIP-RS485/232通讯网关&#xff0c;自主研发的ETHERNET/IP从站功能&#xff0c;完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线连接起…

mysql(六)读写分离

目录 前言 一、概述 二、配置JAVA环境及安装阿米巴 三、配置阿米巴 四、测试 总结 前言 MySQL读写分离是一种常见的数据库架构设计模式&#xff0c;旨在提高系统的性能和可用性。它通过将读操作和写操作分离到不同的MySQL实例上来实现。 读写分离的原理是&#xff1a; 1. 主…

容器化安装环境EFK搭建

容器化安装环境 Docker中安装并启动ElasticSearch 前置配置 第一步&#xff1a;在宿主机上执行echo “net.ipv4.ip_forward1” >>/usr/lib/sysctl.d/00-system.conf 2.第二步&#xff1a;重启network和docker服务 [rootlocalhost /]# systemctl restart network &&…

Linux - PostgreSQL 适用于9.x 以上的 tar.gz 源码安装与理解 - 报错集锦

这里写目录标题 序言主要内容bash 配置文件个人理解关于初始化 PostgreSQL 数据库的理解 启动方法检查服务器是否在PostgreSQL中运行关闭 postgresql 数据库方法参考链接 序言 PostgreSQL 9.x 以下版本笔者没用过&#xff0c;具体操作看参考链接&#xff0c;笔者就不记录重复操…

2016年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

2016年1月真题&#xff1a; 四、写作&#xff1a;第56~57小题&#xff0c;共65 分。其中论证有效性分析30 分&#xff0c;论说文35分。 56、论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0…

整数0 强制转化为指针

整数0强制转化为指针的巧用 在工程中看到以下代码&#xff1a; #define my_container_of(ptr,type,member) \ ((type*)((char *) (ptr) - (unsigned long)(&((type*)0)->member))) ->的优先级高于&。 因此 &((type*)0)->member)的解…

Zynq-Linux移植学习笔记之62- PL挂载复旦微flash

1、背景介绍 现在为了全国产化需要&#xff0c;之前所有的进口flash全部要换成国产flash 2、复旦微flash型号 其中EFM25QU256和EFM25QL256对标winbond的w25q256 nor flash 3、FPGA设置 复旦微flash只支持单线模式&#xff0c;当使用PL侧的IP核访问时&#xff0c;需要设置模式…

正在运行中的宝塔项目扩容阿里云购买服务器云盘(数据盘) 挂载流程

阿里云购买服务器云盘(数据盘) 正在运行中的宝塔项目 挂载流程 注意一定要进行阿里云的快照备份 在进行操作 不然丢失数据后就很无奈 注意一定要进行阿里云的快照备份 在进行操作 不然丢失数据后就很无奈 注意一定要进行阿里云的快照备份 在进行操作 不然丢失数据后就很无奈 …

6G内存运行Llama2-Chinese-7B-chat模型

6G内存运行Llama2-Chinese-7B-chat模型 Llama2-Chinese中文社区 第一步&#xff1a; 从huggingface下载 Llama2-Chinese-7b-Chat-GGML模型放到本地的某一目录。 第二步&#xff1a; 执行python程序 git clone https://github.com/Rayrtfr/llama2-webui.gitcd llama2-web…

PCIe基础知识

PCI基础知识 PCI总线的组成&#xff1a;HOST桥、PCI桥、PCI设备 PCI采用的是树型拓扑结构&#xff0c;每一个PCI device相当于树的一个结点或者叶子&#xff0c;对整个PCI Bus的遍历可以采用遍历树的算法&#xff0c;在对树进行遍历之后&#xff0c;可以获得整个PCI Bus的资源需…

海外抖音Tiktok强势来袭,有些人半年赚别人十倍工资

TikTok作为一款流行的短视频社交应用程序&#xff0c;确实在全球范围内取得了很大的成功。许多人通过在TikTok上分享有趣、创意或有吸引力的视频内容&#xff0c;获得了广泛的关注和认可。一些用户甚至能够通过TikTok赚取高额的收入&#xff0c;远远超过传统职业所能获得的工资…

[C++笔记]二叉搜索树

BSTree.h #pragma oncenamespace key {template<class K>//这里习惯用K而不是T&#xff0c;keystruct BSTreeNode {BSTreeNode<K>* _left;BSTreeNode<K>* _right;K _key;BSTreeNode(const K& key):_left(nullptr), _right(nullptr), _key(key){}};templ…

Hbuilder折叠代码时显示最后一行

之前写pc端代码时&#xff0c;都是使用vscode&#xff0c;里面的折叠代码&#xff0c;都是将开头和尾部中间的内容折叠起来&#xff0c;这样复制或者删除操作代码时&#xff0c;都很顺手&#xff0c;但是最近要用Hbuilder写移动端&#xff0c;它默认的折叠代码方式&#xff0c;…

Java的第十五篇文章——网络编程(后期再学一遍)

目录 学习目的 1. 对象的序列化 1.1 ObjectOutputStream 对象的序列化 1.2 ObjectInputStream 对象的反序列化 2. 软件结构 2.1 网络通信协议 2.1.1 TCP/IP协议参考模型 2.1.2 TCP与UDP协议 2.2 网络编程三要素 2.3 端口号 3. InetAddress类 4. Socket 5. TCP网络…

ShardingSphere-Proxy绑定表与广播表详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

【雕爷学编程】MicroPython动手做(13)——掌控板之RGB三色灯

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

STM32 UDS Bootloader开发-上位机篇-CANoe制作(2)

文章目录 前言CANoe增加NodeCAPL脚本获取GUI中的参数刷写过程诊断仪在线接收回调函数发送函数总结前言 在上一篇文章中,介绍了UDS Bootloadaer上位机软件基于CANoe的界面设计。本文继续介绍CAPL脚本的编写以实现刷写过程。 CANoe增加Node 在开始编写CAPL之前,需要在Simula…

UE4/5C++多线程插件制作(十九、异步资源读取封装,细节修改)

MTPResourceLoadManage 接口 MTPThreadInterface 添加头文件: #include "Engine/StreamableManager.h" cpp class IStreamableContainer { public:virtual ~IStreamableContainer(){}//异步//存储路径IStreamableContainer& operator>>(const TArray…