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

📄 navigategraph.cpp

📁 上海广茂达as-r机器人避障程序
💻 CPP
字号:
// NavigateGraph.cpp : implementation file
//

#include "stdafx.h"
#include "NavigateGraph.h"
#include <math.h>

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

/////////////////////////////////////////////////////////////////////////////
// CNavigateGraph

CNavigateGraph::CNavigateGraph()
{
	for( int i = 0 ;i<MAX_SENSOR;i++ )
	{
	    m_dData[i] = 0.0;
	}

	m_fRatio = 0.5;
}

CNavigateGraph::~CNavigateGraph()
{
}


BEGIN_MESSAGE_MAP(CNavigateGraph, CStatic)
	//{{AFX_MSG_MAP(CNavigateGraph)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNavigateGraph message handlers
void CNavigateGraph::SetData(double data[],int nSize)
{
	if( nSize > sizeof(m_dData) )
	{
		return;
	}

	memcpy(m_dData,data,nSize);
	InvalidateRect(0);
}

void CNavigateGraph::SetRatio(float fRatio)
{
	m_fRatio = fRatio;
}

#undef  PI
#define PI 3.1415926
void CNavigateGraph::OnPaint()
{
	CRect  rc;
	int   i;
	int   r;
	CPoint center;
	CPoint pt0,pt1;
	double ratio = 1.0;

	CString label;
	CString str;
	CPen  pen;
	CPen  back_pen;
	CPen* pOldPen = NULL;
	CPaintDC dc(this); // device context for painting
    
	GetClientRect(&rc);
	ratio = 1.0 * rc.Width()/rc.Height();
	
	dc.SelectStockObject(DKGRAY_BRUSH);
	dc.PatBlt(0,0,rc.right-rc.left,rc.bottom - rc.top,PATCOPY);
	
	pen.CreatePen(PS_SOLID,3,RGB(255,0,0));
	pOldPen = dc.SelectObject(&pen);
	//draw a ellipse
	CRect rcEllipse;
	rcEllipse.left = rc.Width()/3;
	rcEllipse.right = rcEllipse.left + rc.Width()/3;
	rcEllipse.top = rc.Height()/3;
	rcEllipse.bottom = rcEllipse.top + rc.Height()/3;
	dc.SelectStockObject(DKGRAY_BRUSH);

	dc.Ellipse(rcEllipse);
	
	r = rcEllipse.Width()/2;
	center.x = rc.Width()/2;
	center.y = rc.Height()/2;
	//fill the data
	for( i = 0; i< MAX_SENSOR; i++ )
	{   
		pt0.x = (int)(r*cos( (i+1) *PI/4));
		pt0.y = (int)(r*sin( (i+1) *PI/4));
        pt1.x = (int)((r+m_dData[i]*m_fRatio)*cos((i+1)*PI/4));
		pt1.y = (int)((r+m_dData[i]*m_fRatio)*sin((i+1)*PI/4));
		pt0.y = (int)(pt0.y/ratio);
		pt1.y = (int)(pt1.y/ratio);
		pt0 += center;
		pt1 += center;
		pt0.y = rc.Height() - pt0.y;
		pt1.x = (pt1.x>rc.Width())?rc.Width():pt1.x;
		pt1.y = (pt1.y>rc.Height())?rc.Height():pt1.y;
		pt1.y = rc.Height() - pt1.y;
		dc.MoveTo(pt0);
		dc.LineTo(pt1);
		label.Format("%0.2f",m_dData[i]);//小数点两位
		dc.TextOut(pt1.x,pt1.y,label);
	}

	pen.DeleteObject();
	dc.SelectObject(&pOldPen);
}
#undef  PI

⌨️ 快捷键说明

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