首页 > 代码库 > ADS-B&雷达显示终端6.2

ADS-B&雷达显示终端6.2

修改日志:


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

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

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


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

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

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

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

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

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


软件运行效果:



反色显示效果:



源代码如下:


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

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