码迷,mamicode.com
首页 > 其他好文 > 详细

ADS-B&雷达显示终端6.2

时间:2014-11-17 10:49:10      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:asterix   ads-b 监视数据   雷达   仿真   

修改日志:


   1 由于地图层的不但增多,如果全部开启所有地图层显示,则整体显示过于密集凌乱,容易导致视

觉疲劳,也会使得飞行目标显示不突出,为解决些问题,对软件的配色模式进行了调整,并对软件的

反色模式进行了增强。只需要按下F12快捷键,即可实现配色模式的切换。


        2 由于显示图层多,绘图元素数量过大,导致在进行缩放重绘时,软件出显卡顿,为解决此问题,

加入了绘图元素有有效性守检查,绘图之前,先判断绘图元素是否位于屏幕内,不是屏幕内的元素则

不绘制。对于点状元素,如VOR、NDB、城市等元素,只需要判断点坐标是否位于屏内即可;对于区

域,如行政省、危险区、限制区、管制区、情报区,以及折线类元素,如航路、河流等,则需要采用

另外的方式进行处理。具体修理方法为先获得绘图元素的最大外切矩形,然后判断些矩形与屏幕矩形

是否存在相交区域,若有则绘制此元素,否则不绘制。文章后面将会给出相关算法。


软件运行效果:

bubuko.com,布布扣


反色显示效果:

bubuko.com,布布扣


源代码如下:


//获得多边形最大外接矩形算法

CRect CDraw::get_area_bound_rect(

		POINT* pt,	
		int nLen)
{
	//	POINT rtPt;	
	int lMaxX = (pt)->x;	
	int lMinX = (pt)->x;	
	int lMaxY = (pt)->y;	
	int lMinY = (pt)->y;	
	for(int i=0 ;i<nLen; i++)
	{
		if(lMaxX < (pt+i)->x)
			lMaxX = (pt+i)->x;
		if(lMinX > (pt+i)->x)
			lMinX = (pt+i)->x;
		if(lMaxY < (pt+i)->y)
			lMaxY = (pt+i)->y;
		if(lMinY > (pt+i)->y)
			lMinY = (pt+i)->y;
	}
	CRect rtRc(lMinX, lMinY,
			lMaxX, lMaxY);

	return rtRc;
}


//判断两矩形是否相交算法
bool check_rect_cover(
		CRect rec1,
		CRect rec2)
{
	CPoint rec1TL =  rec1.TopLeft();
	CPoint rec1BR =  rec1.BottomRight();
	CPoint rec2TL =  rec2.TopLeft();
	CPoint rec2BR =  rec2.BottomRight();


	if(rec1TL.x > rec2BR.x)
		return 0;
	if(rec1BR.x < rec2TL.x)
		return 0;
	if(rec1TL.y > rec2BR.y)
		return 0;
	if(rec1BR.y < rec2TL.y)
		return 0;

	return 1;
}

软件作为兴趣项目,仍在持续的更新中,欢迎各位多提意见,促进完善. qq 387969934 tel 13332000255.


ADS-B&雷达显示终端6.2

标签:asterix   ads-b 监视数据   雷达   仿真   

原文地址:http://blog.csdn.net/emperior/article/details/41203919

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!