⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tarshow.cpp

📁 目标跟踪显示的源代码,包含极坐标与之角坐标的转换,轨迹点的显示等
💻 CPP
字号:
 // TarShow.cpp: implementation of the CTarShow class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TarShow.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTarShow::CTarShow()
{

}

CTarShow::~CTarShow()
{

}

void CTarShow::SetGraphPar(CPoint p, int SizeR,float Angle0)
{
	m_p0=p;
	m_SizeR=SizeR;
	m_Angle0=Angle0;
}

void CTarShow::DrawGrid(CDC *pDC)
{
	CPen *oldpen,newpen;
	newpen.CreatePen(PS_DOT,1,RGB(0,0,0));
	oldpen=pDC->SelectObject(&newpen);

	for(int i=1;i<m_NumR;i++)
	{
		pDC->MoveTo(m_p0);
		pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR*i/m_NumR,
			m_BeginAngle+m_Angle0,m_EndAngle-m_BeginAngle);
	}

	for(i=1;i<m_NumAngle;i++)
	{
		pDC->MoveTo(m_p0);
		pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0
			+(m_EndAngle-m_BeginAngle)*i/m_NumAngle,0);
	}
	pDC->SelectObject(oldpen);
	newpen.DeleteObject();
	//pDC->MoveTo(m_p0);
	//pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0,0);

}

void CTarShow::DrawBorder(CDC *pDC)
{
	pDC->MoveTo(m_p0);
	pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0,
		m_EndAngle-m_BeginAngle);
	pDC->LineTo(m_p0);
}

void CTarShow::Convert(double d_x, double d_y, int &i_x, int &i_y,
					   bool flg)
{
	double a,r,angle;
	if(!flg)
	{
		r=d_x;
		angle=(d_y+m_Angle0)*PI/180;
	}
	else
	{
		r=pow(d_x*d_x+d_y*d_y,0.5);
		if(fabs(d_x)<=EPS)
		{
			if(d_y<0)
				angle=-PI/2+m_Angle0*PI/180;
			else
				angle=PI/2+m_Angle0*PI/180;
		}
		else
		{
			if(d_x<-EPS)
				angle=atan(d_y/d_x)+PI+m_Angle0*PI/180;
			if(d_x>EPS)
				angle=atan(d_y/d_x)+m_Angle0*PI/180;
		}
	}
	a=r*m_SizeR/m_R;
	i_x=(int)(a*cos(angle));
	i_y=(int)(a*sin(angle));
}

void CTarShow::DrawScale(CDC *pDC)
{
	int a;
	int x1,y1;

	m_font.CreateFont(15, 0, 0, 0,
		 FW_NORMAL, FALSE, FALSE,FALSE, 
		 ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
		 DEFAULT_QUALITY, VARIABLE_PITCH | FF_DONTCARE, 
		 "Times New Roman");
	CFont *pOldFont=(CFont*)pDC->SelectObject(&m_font);
    //此处是否需要设置CPen?
	CString s;
	for(int i=0;i<=m_NumAngle;i++)
	{
		a=(int)(m_SizeR*cos((m_Angle0+m_BeginAngle+
			(m_EndAngle-m_BeginAngle)*i/m_NumAngle)*PI/180));
		x1=m_p0.x+a;
		a=(int)(m_SizeR*sin((m_Angle0+m_BeginAngle+
			(m_EndAngle-m_BeginAngle)*i/m_NumAngle)*PI/180));
		y1=m_p0.y-a;
		a=(int)(m_BeginAngle+(m_EndAngle-m_BeginAngle)*
			i/m_NumAngle);
		s.Format("%d°",a);//加了个度的符号!
		if(a>0)
		{
			x1+=8;
			y1-=10;
		}
		if(a==0)
		{
			x1+=3;
			y1-=5;
		}
		if(a<0)
		{
			x1+=3;
			y1+=0;
		}
		pDC->TextOut(x1,y1,s);
	}
	
	for(i=0;i<=m_NumR;i++)
	{
		a=(int)(m_SizeR*i/m_NumR*cos((m_Angle0+m_BeginAngle)*PI/180));
		x1=m_p0.x+a;
		a=(int)(m_SizeR*i/m_NumR*sin((m_Angle0+m_BeginAngle)*PI/180));
		y1=m_p0.y-a;
		a=(int)(m_R*i/m_NumR);
		s.Format("%d",a);
		if(s.GetLength()==1)
		{
			x1-=8;
			y1-=3;
		}
		if(s.GetLength()==2)
		{
			x1-=15;
			y1-=3;
		}
		if(s.GetLength()==3)
		{
			x1-=22;
			y1-=3;
		}
		pDC->TextOut(x1,y1,s);
	}

	pDC->SelectObject(pOldFont);
	m_font.DeleteObject();
    pOldFont->DeleteObject();//?
}

void CTarShow::DrawPoint(CDC *pDC, double x0, double y0,
						 bool flg, COLORREF color)
{
	int i_x0,i_y0;
	Convert(x0,y0,i_x0,i_y0,flg);

	CPen *oldpen,newpen;
	CRect rect;//?
	CRgn rgn;
	CBrush brush;
	int r;
	newpen.CreatePen(PS_SOLID,5,RGB(255,0,0));
   	oldpen=pDC->SelectObject(&newpen);

	r=3;
	rgn.CreateEllipticRgn(m_p0.x+i_x0-r,m_p0.y-i_y0-r,m_p0.x+i_x0+r,
		m_p0.y-i_y0+r);
	brush.CreateSolidBrush(color);
	pDC->FillRgn(&rgn,&brush);

	pDC->SelectObject(oldpen);
	newpen.DeleteObject();
//	oldpen->DeleteObject();

}

void CTarShow::DrawT(CDC *pDC, double x0, double y0, char s0, 
		double x1, double y1, char s1, bool flg, COLORREF color)
{
	int i_x0,i_y0,i_x1,i_y1;
	Convert(x0,y0,i_x0,i_y0,flg);
	Convert(x1,y1,i_x1,i_y1,flg);
	if(s0==3&&s1==3)
	{
		pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
		pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
	}
	else
	{
		CPen *oldpen,newpen;
		if(color==RGB(0,0,0))
			newpen.CreatePen(PS_SOLID,1,RGB(255,0,0));
		else
			newpen.CreatePen(PS_SOLID,1,color);

    	oldpen=pDC->SelectObject(&newpen);
		pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
		pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
		pDC->SelectObject(oldpen);
	    newpen.DeleteObject();
		oldpen->DeleteObject();
	}
}

void CTarShow::SetFullSize(float R, float BeginAngle, float EndAngle)
{
	m_R=R;
	m_BeginAngle=BeginAngle;
	m_EndAngle=EndAngle;
}

void CTarShow::SetGridNum(short NumR, short NumA)
{
	m_NumAngle=NumA;
	m_NumR=NumR;
}

bool CTarShow::GetCoo(int x, int y, double &radii, double &angle)
{
	int x0=x-m_p0.x;
	int y0=-y+m_p0.y;

	radii=pow(x0*x0+y0*y0,0.5)*m_R/m_SizeR;
	angle=atan((double)y0/x0)*180/PI-m_Angle0;

	if(radii<=m_R&&angle>=m_BeginAngle&&angle<=m_EndAngle)
	{
		return true;
	}
	else
	{
		radii=0;
		angle=0;
		return false;
	}
}

void CTarShow::DrawT(CDC *pDC, double x0, double y0, double x1, 
		double y1, bool flg, COLORREF color)
{
	int i_x0,i_y0,i_x1,i_y1;
	Convert(x0,y0,i_x0,i_y0,flg);
	Convert(x1,y1,i_x1,i_y1,flg);
	
	CPen *oldpen,newpen;
	newpen.CreatePen(PS_SOLID,1,color);
	
	oldpen=pDC->SelectObject(&newpen);
	pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
	pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
	pDC->SelectObject(oldpen);
	newpen.DeleteObject();
	oldpen->DeleteObject();
}

void CTarShow::ShowString(CDC *pDC, double x0, double y0,bool flg,
						  CString str)
{
	int i_x0,i_y0;
	Convert(x0,y0,i_x0,i_y0,flg);

	short r=5;
	pDC->TextOut(m_p0.x+i_x0+r,m_p0.y-i_y0+r,str);
}

void CTarShow::DrawT(CDC *pDC, double x0, double y0, double x1, 
		double y1, bool flg, CPen &pen)
{
	int i_x0,i_y0,i_x1,i_y1;
	Convert(x0,y0,i_x0,i_y0,flg);
	Convert(x1,y1,i_x1,i_y1,flg);
	
	CPen *oldpen;
	oldpen=pDC->SelectObject(&pen);

	pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
	pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
	pDC->SelectObject(oldpen);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -