一步一步用arduino与Processing实现雷达扫描(2)

62 篇文章 28 订阅
37 篇文章 15 订阅

雷达表盘的绘制相对来说简单,属于粗线条的工作,在实现了雷达的表盘绘制以后,我们接下来的工作慢慢开始细致化了,当然,这能更大程度的让我们熟悉Processing的用法。
在这篇文章中,我们重点实现扫描线的拖影效果以及扫描目标点的绘制

首先我们来看,扫描的拖影效果实现。拖影效果实现的原理简单,理论上来说就是利用fill的第四个参数的变化在绘制一个线簇,利用渐变的线簇来实现拖影,但线簇有一个问题,那就是线与线之间会有空隙,不好看!
拖影本身就是一个扇形,所以这里我们用到一个acr函数来绘制扇形,几个小扇形共同形成一个完成的扇形拖影
代码如下:

 //拖影扫描线的绘制
  for(int col=1;col<20;col++)
  {
    fill(0,180,0,10*col);
    arc(width/2,height/2,2*r,2*r,
    a+0.01*(col-1),
    a+0.01*col);   
  }

运行效果如下:
在这里插入图片描述

接下来,我们要实现扫描目标的模拟现实(这些模拟目标暂定用随机函数来实现,进入硬件和软件联调的阶段,我们就更换为实际数据)。在实现之前,我们要想好现实效果。
1、假设你的设计效果是扫描的目标点被扫描到后扫描一圈后如果目标继续存在就继续现实,否则就会慢慢淡去,慢慢消失。效果设计好了,我们要预想到,这些点不能是一眨眼就消失的,所以,这些目标点要在屏幕上持续显示一段时间,也就是说,我们要把这些点储存起来才可以。故此,我们必须用到可以存储数据的对象——数组(当然,你要把这些点存储成文件也是可以的,只不过更加麻烦)。
2、除了上面的问题,我们要注意,仅仅绘制一个点既不符合真是的目标体积大小的表现,也无法在表盘上显示清楚,一个点太小,不利于观察者看清楚,所以我们这里用填充了颜色的圆来替代(这里我们设计一个类来充当目标点)。
我们来看代码:

   ArrayList<CirclePoint> cparr = new ArrayList<CirclePoint>(); 
   CirclePoint cpt=new CirclePoint(px,py);
   cparr.add(cpt);
   for (int c=0;c<cparr.size();c++) {
   CirclePoint cp=cparr.get(c);
  ellipse(cp.x,cp.y,20,20);
   --cp.Alf;
    if(cp.Alf<10)
   cparr.remove(c);
  }

上述代码中的CirclePoint类是我们设计的一个替代扫描目标点的类,其中我为这个类设计了Alf属性,用于存储它的透明度,我们这篇中不重点讲述类如何设计(下一篇中会详细介绍)。我们重点要理解,这些点都要被存储起来。

到这,我们的运行效果基本可以了,我们看看效果:
在这里插入图片描述

接下来,我们的目标就是完善表盘的显示,封装模拟目标点,以及改善显示的真实性。

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值