java计算雷达扫描范围_雷达扫描 - linyinmobayu - 博客园

1、设计思想

雷达扫描图,在影视作品中见到较多,比如飞机雷达、舰艇雷达,有一个扫描线转圈代表雷达一周旋转或一个批次的收发,发现目标就在表盘上标记位置。和汽车仪表盘类似,汽车仪表盘有底盘背景图、同圆、刻度、刻度值、旋转的指针。能在汽车仪表盘的基础上略作修改,比如指针换成带有余辉的扫描扇面,就能完成一个雷达扫描图。

a70b1d9ef8d9436082dbcf822c990408.png

代码实现原理:

上图的扫描线和余辉效果,可以使用QConicalGradient 函数来实现,qconicalgradient()提供的是一种扇形渐变效果,圆锥式渐变或称角度渐变。用这个渐变色来填充drawPie函数就可以实现扇形选择的余辉。

QConicalGradient::QConicalGradient(qreal cx, qreal cy, qreal angle)

void QPainter::drawPie(const QRectF &rectangle, int startAngle, int spanAngle)

Qt大神刘典武文章中有典型的讲解,《Qt编写自定义控件62-探探雷达》中实现的扫描效果就是雷达的效果。详情移步https://zhuanlan.zhihu.com/p/85512788。

2、代码实现

绘制同心圆,x和y轴实线,45度对角线虚线。

void Radar::drawCircle(QPainter *painter)

{

painter->save();

QColor color = QColor(0, 100, 0);

QPen pen = QPen(color, 2);

painter->setPen(pen);

for(int i=0; i<4; i++)

{

int r = this->radius / 4 * (i+1);

painter->drawEllipse(-r, -r, r * 2, r * 2);

}

for(int i=0; i<=4; i++) // x,y 轴线是实线

{

int r = this->radius;

if((i%2) == 0) {

pen.setStyle(Qt::SolidLine);

}

else{

pen.setStyle(Qt::DashDotLine);

//pen.setDashPattern(QVector() << 10 << 2 ); //实线:空线的比例

}

painter->setPen(pen);

painter->drawLine(-r, 0, r, 0);

painter->rotate(90/2);

}

painter->restore();

}

绘制扫描图,依靠锥形渐变颜色,通过透明度控制形成扫描效果,然后绘制饼图。

void Radar::drawScan(QPainter *painter)

{

painter->save();

//锥形渐变颜色,通过透明度控制形成扫描效果

QConicalGradient conicalGradient(0, 0, this->angle);

QColor color = QColor(0,150,0);

color.setAlpha(100);

conicalGradient.setColorAt(0, color);

color.setAlpha(20);

conicalGradient.setColorAt(0.1, color);

color.setAlpha(0);

conicalGradient.setColorAt(1, color);

//绘制饼圆

QPen pen;

pen.setWidth(5);

pen.setBrush(conicalGradient);

painter->setPen(pen);

painter->setBrush(conicalGradient);

int r = this->radius;

QRect rect(-r, -r, r * 2, r * 2);

painter->drawPie(rect, this->angle * 16, 360 * 16); // 1/16th of a degree

painter->restore();

}

b27d08ab61127f33387c8d41bc961ff2.png

给雷达加上模拟的扫描目标,实现起来很简单,就是打点。

void Radar::drawPoints(QPainter *painter)

{

painter->save();

QColor color = QColor(200, 10, 0);

QPen pen = QPen(color, 1);

painter->setPen(pen);

painter->setBrush(color);

for(int i=0; ipoints.count(); i++)

{

int r = 6;

QRect rect(points[i].x() - r/2, points[i].y() - r/2, r * 2, r * 2);

painter->drawEllipse(rect);// 画实心小点

}

painter->restore();

}

最终效果如下。

83f5503d9095621a5926b4c0f9a230d5.png

外层怎么 调用?使用信号和槽驱动Radar类对象。

RadarScan::RadarScan(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::RadarScan)

{

ui->setupUi(this);

// start and stop

connect(this, &RadarScan::radar_state_changed,

ui->radar, &Radar::radar_start_control);

connect(ui->startButton, &QPushButton::clicked, [=](){

emit radar_state_changed(true);

});

connect(ui->stopButton, &QPushButton::clicked, [=](){

emit radar_state_changed(false);

});

// speed control

connect(this, &RadarScan::radar_speed_changed,

ui->radar, &Radar::radar_speed_control);

connect(ui->fastButton, &QPushButton::clicked, [=](){

emit radar_speed_changed(true);

});

connect(ui->slowButton, &QPushButton::clicked, [=](){

emit radar_speed_changed(false);

});

connect(ui->randomButton, &QPushButton::clicked, ui->radar, &Radar::radar_random_point);

}

3、效果演示

652d96eb37096a54f506afd502df5441.png

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

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

相关文章

mysql降序后去重_Mysql 数据记录去重后按字段排序

实现效果&#xff1a;去重—取最新的—排序例子 : 按用户ID获取历史记录中某个人的记录&#xff0c;要求非重复的且每条只获取最新的&#xff0c;同时按添加时间倒序排列的实现 &#xff1a;SELECT *FROM (SELECT *FROM historysWHERE types_id1ORDER BY created DESC) AS BGRO…

linux php 守护进程,PHP程序员玩转Linux系列 使用supervisor实现守护进程

PHP程序员玩转Linux系列文章&#xff1a;首先遇到的问题是,部署nodejs的博客程序时,我把执行nodejs的命令放到后台,使用加&和nohup命令如:nodejs index.js & 或者 nohup nodejs index.js &&这个使用是当退出此次终端会话的时候就会停止, nohup这个命令理论上是…

计算机初级包括php吗,计算机的基本组成包括什么

计算机的基本组成包括控制器、运算器、存储器、输入设备和输出设备。其中&#xff0c;控制器是整个计算机的中枢神经&#xff0c;它的功能是对程序规定的控制信息进行解释&#xff0c;根据其要求进行控制&#xff0c;调度程序、数据&#xff0c;协调计算机各部分工作及内存与外…

php 获取今天数据,ThinkPHP 按日期获取今天获取本周获取本月获取今年数据

ThinkPHP 按日期或指定时间段获取今天、获取本周、获取本月、获取今年等数据。Db(gh_user)->whereTime(addTime, >, 2020-10-1)->select(); // 大于某个时间Db(gh_user)->whereTime(addTime, select(); // 小于某个时间Db(gh_user)->whereTime(addTime, between…

PHP复杂度,php 常用算法和时间复杂度

按数量级递增排列&#xff0c;常见的时间复杂度有&#xff1a;常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2)&#xff0c;立方阶O(n3)复制代码 代码如下://二分查找O(log2n)function erfen($a,$l,$h,$f){if($l >$h){ return false;}$m intval(($l…

ubuntu11.10 源码编译安装php5.3.8,Ubuntu 11.10编译安装Nginx、PHP 5.3.8、MySQL、MongoDB、Memcached、SSL、SMTP...

手动安装php mongo扩展sudo apt-get install autoconfwget http://pecl.php.net/get/mongo-1.2.6.tgztar -zxvf mongo-1.2.6.tgzcd mongo-1.2.6/usr/local/php/bin/phpize./configure --with-php-config/usr/local/php/bin/php-configmakesudo make installecho extension mon…

php中常用的全局变量有,在PHP中如何使用全局变量的方法详解

但是你可以使用你自己的全局变量。使用关键字“global”你就可以把全局数据导入到一个函数的局部范围内。如果你不明白“变量使用范围”&#xff0c;请你自己参考PHP手册上的相关说明。下面是一个使用“global”关键字的演示例子&#xff1a;代码如下:正如你在上面的例子中看到…

java实现图像处理高通滤波,图像处理入门——滤波 - leo_de_macondo的个人页面 - OSCHINA - 中文开源技术交流社区...

模糊图像模糊的方法可以将每个像素的rgb值用周围像素的加权平均值来代替。比如用周围的9个像素来计算加权平均值&#xff0c;权值可以用一个3x3的矩阵来表示&#xff1a;| 1 2 1 || 2 4 2 | * (1/16)| 1 2 1 |中间的像素是要处理的像素&#xff0c;越靠近中间权…

java激光图,java-OpenCV Android跟踪激光点

我正在尝试在Android设备上使用OpenCV跟踪激光点.我想使用此激光点在我的cameraview上的画布上绘制.我已经将我的camerapreview转换为HSV色彩空间,并使用阈值过滤(仅在H和V通道上)来分离我的Laserdot.这相当健壮.public Mat onCameraFrame(CvCameraViewFrame cvf) {// Grab the…

matlab数据接口技术,matlab接口技术与应用

matlab接口技术与应用来源&#xff1a;mamingkeda作者&#xff1a;华仔浏览&#xff1a;1070时间&#xff1a;2016-08-10 14:18标签&#xff1a;摘要&#xff1a;matlab接口技术与应用应用程序接口的使用方法。全书分为10章&#xff0c;第1章是matlab环境和编程语言的概述&…

php iframe 上传文件,php+iframe 实现上传文件功能示例

本文实例讲述了phpiframe 实现上传文件功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我们通过动态的创建iframe&#xff0c;修改form的target&#xff0c;来实现无跳转的文件上传。具体的实现步骤1.捕捉表单提交事件2.创建一个iframe3.修改表单的target,指向ifr…

break是python合法标识符,Python笔记——break的注意事项

ajax状态ajax的几个状态 Uninitialized 初始化状态.XMLHttpRequest 对象已创建或已被 abort() 方法重置. Open open() 方法已调用,但是 send() 方法未调 ...使用Npoi向Excel中插入图片先把数据库中的数据都导入到Excel表格中,把图片地址的路径全部转成绝对路径. 使用Npoi读取刚…

bulk Java提交数据,性能优化 – bulk提交 - ELK Stack 中文指南

在 CRUD 章节&#xff0c;我们已经知道 ES 的数据写入是如何操作的了。喜欢自己动手的读者可能已经迫不及待的自己写了程序开始往 ES 里写数据做测试。这时候大家会发现&#xff1a;程序的运行速度非常一般&#xff0c;即使 ES 服务运行在本机&#xff0c;一秒钟大概也就能写入…

catalog java,Java Connection getCatalog()方法与示例

通常&#xff0c;目录是一个目录&#xff0c;其中包含有关数据集&#xff0c;文件或数据库的信息。而数据库目录中包含所有数据库&#xff0c;基本表&#xff0c;视图(虚拟表)&#xff0c;同义词&#xff0c;值范围&#xff0c;索引&#xff0c;用户和用户组的列表。Connection…

matlab 函数 命名参数,如何处理MATLAB中的函数参数的名称/值对

我喜欢使用结构为我的选择。这给你一个简单的方法来存储选项和一个简单的方法来定义它们。此外&#xff0c;整个事情变得相当紧凑。function example(varargin)%# define defaults at the beginning of the code so that you do not need to%# scroll way down in case you wan…

ssrf 过滤.php,SSRF技巧之如何绕过filter_var( )

0x00 前言前几天我读了两篇非常棒的论文&#xff1a;第一篇是发表在blackhat.com上的“A New Era of SSRF ”&#xff0c;讲述的是不同编程语言的SSRF问题&#xff1b;第二篇是由Positive Technology发表的一篇名为“PHP Wrapper” 的论文&#xff0c;它主要讲述的是如何以多种…

matlab 爬虫 例子,认识爬虫(示例代码)

爬虫分为两种&#xff1a;1.通用爬虫。2.聚焦爬虫。通用爬虫&#xff1a;搜索引擎用的爬虫系统。一.目标&#xff1a;爬取所有网站的网页下载下来&#xff0c;存放到本地服务器里形成备份。二.抓取流程&#xff1a;a.首选选取一部分已有的url,把这些url放到待爬取队列。b.从队列…

如何用notepad写php,notepad新手怎么使用

新手使用notepad的几个小技巧&#xff1a;一、软件始终置于屏幕最前方有时候我们在运行程序时&#xff0c;需要将notepad放置到屏幕最前方&#xff0c;此时只需要在工具栏中点击&#xff1a;view——always on tops&#xff1b;此时notepad就会一直处于屏幕最前方。注&#xff…

rman打开oracle归档日志,Oracle RAC中使用RMAN管理归档日志

RMAN归档配置的两种方案1.在Oracle asm和集群文件系统时的归档方案对于Oracle RAC来说首选是使用Oracle asm作为reocvery区域。可选择的你也可以使用集群文件系统的归档方案。如果你使用了一种集群文件系统&#xff0c;那么当进行日志归档时每个节点会将归档日志写到集群文件系…

oracle10g数据库复制,oracle -10g 中Duplicate 复制数据库

oracle --10g 中Duplicate 复制数据库本次实验通过duplicate命令&#xff0c;在本机环境中创建一个复制数据库。目标数据库为hongye、复制数据库为catdb。环境别名设置&#xff1a;alias sqlrlwrap sqlplus /nologalias rmanrlwrap rmanalias dbscd $ORACLE_HOME/dbsalias rdbc…