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

📄 optimizationview.cpp

📁 此代码可实现最优控制理论中的单纯型寻优算法
💻 CPP
字号:
// optimizationView.cpp : implementation of the COptimizationView class
//

#include "stdafx.h"
#include "optimization.h"

#include "optimizationDoc.h"
#include "optimizationView.h"

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

/////////////////////////////////////////////////////////////////////////////
// COptimizationView

IMPLEMENT_DYNCREATE(COptimizationView, CView)

BEGIN_MESSAGE_MAP(COptimizationView, CView)
	//{{AFX_MSG_MAP(COptimizationView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COptimizationView construction/destruction

COptimizationView::COptimizationView()
{
	// TODO: add construction code here

}

COptimizationView::~COptimizationView()
{
}

BOOL COptimizationView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// COptimizationView drawing

void COptimizationView::OnDraw(CDC* pDC)
{
	COptimizationDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	
	if (flag!=0)
	{
	    CRect GraRect;
		GraRect.left = 100;
		GraRect.right = GraRect.left+600;
		GraRect.top = 50;
		GraRect.bottom = GraRect.top+400;		
		CPen *pFraPen = new CPen(PS_SOLID,2,RGB(0,0,255));
		CPen *pOldPen = pDC ->SelectObject(pFraPen);
		pDC ->Rectangle(GraRect);
		CPen *pLinePen = new CPen(PS_DOT,1,RGB(0,0,255));
		pDC ->SelectObject(pLinePen);


	
		int i,k;
		int distance=500;
		for(i=1;i<10;i++)
		{
			pDC ->MoveTo(100,50+i*40);
			pDC ->LineTo(700,50+i*40);
		}
		for(i=1;i<10;i++)
		{
			pDC ->MoveTo(100+60*i,50);
			pDC ->LineTo(100+60*i,450);
		}


			
		double max = 0.0;
		double min = 0.0;
		for(i=0;i<distance;i++)
		{
			if(pDoc->output[i]>=max) max = pDoc->output[i];
			if(pDoc->output[i]<=min) min = pDoc->output[i];
		}

	   CFont MyFontPrint;
	   MyFontPrint.CreateFont( 15,
					            0,
					            0,
					            0,
				              200,
		 	                FALSE,
				            FALSE,
					            0,
		             ANSI_CHARSET,
	           OUT_DEFAULT_PRECIS,
	          CLIP_DEFAULT_PRECIS,
	              DEFAULT_QUALITY,
	       DEFAULT_PITCH|FF_SWISS,
	                "宋体");
	CFont *pOldFont = pDC ->SelectObject(&MyFontPrint);
	pDC->TextOut(675,465," 时间(s)");

	CString strx;
	for(i=0;i<=9;i++)
	{	strx.Format("%.2f",float(max-(max-min)/10.0*i));
		pDC ->TextOut(75,45+i*40,strx);
		}
		CString stry;
	for(i=0;i<=10;i++)
	{	stry.Format("%.1f",float(distance/10*i));
		pDC ->TextOut(90+60*i,450,stry);
	}

		double yscale;
		yscale = double(400/(max-min));
		double xscale;
		xscale = double(600/float(distance));

		
		CPen *pInputPen = new CPen(PS_SOLID,1,RGB(0,100,100));
		pDC ->SelectObject(pInputPen);
		int x,y;
		x=100;
		y=450-int(pDoc->input[0]*yscale);
		pDC ->MoveTo(x,y);
		
		for(k=1;k<distance;k++)
		{	x=100+int(k*xscale);
			y=450-int(pDoc->input[k]*yscale);
			pDC ->LineTo(x,y);
		}

		pDC ->MoveTo(100,500);
		pDC ->LineTo(150,500);
		pDC->TextOut(150,500,"输入曲线");


		CPen *pOutputPen = new CPen(PS_SOLID,1,RGB(255,0,0));
		pDC ->SelectObject(pOutputPen);
		x=100;
		y=450-int(pDoc->output[0]*yscale);
		pDC ->MoveTo(x,y);
		for(i=1;i<distance;i++)
		{	x=100+int(i*xscale);
			y=450-int(pDoc->output[i]*yscale);
			pDC ->LineTo(x,y);
		}

		pDC ->MoveTo(250,500);
		pDC ->LineTo(300,500);
		pDC->TextOut(300,500,"输出响应");


		pDC ->SelectObject(pOldPen);
		pDC ->SelectObject(pOldFont);

		
	
		delete pOutputPen;
		delete pInputPen;
		delete pFraPen;
		delete pLinePen;
	}

}

/////////////////////////////////////////////////////////////////////////////
// COptimizationView printing

BOOL COptimizationView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void COptimizationView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void COptimizationView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// COptimizationView diagnostics

#ifdef _DEBUG
void COptimizationView::AssertValid() const
{
	CView::AssertValid();
}

void COptimizationView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

COptimizationDoc* COptimizationView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COptimizationDoc)));
	return (COptimizationDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// COptimizationView message handlers

⌨️ 快捷键说明

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