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

📄 malthus.cpp

📁 这是一个可以画出马尔萨斯引力线图的源程序.可以在vc环境下运行.
💻 CPP
字号:
// Malthus.cpp: implementation of the CMalthus class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DrawMalthus.h"
#include "Malthus.h"

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

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

CMalthus::CMalthus()
{

}

CMalthus::~CMalthus()
{
	m_pDC=NULL;
}

CMalthus::CMalthus(CDC* pDC)
{
	m_pDC=pDC;
}

CMalthus::Draw()
{
	m_pDC->GetWindow()->RedrawWindow();
	GetMaxX();
	GetMaxY();
	MaxGen=0x66FF;
	DrawMalthus();
}

CMalthus::Draw1()
{
	m_pDC->GetWindow()->RedrawWindow();
	GetMaxX();
	GetMaxY();
	DrawMalthus1();
}

CMalthus::DrawMalthus()
{
	int       i, j, Color, Count, X, Y;
	double     Popold, Popnew, Rate;
/*                                           */
/*       malthusean population growth        */
/*        Pn+1 == R * (Pn - PnPn2)           */
/*                                           */
	Popnew = 0.0;
	Rate = 2.3;
	Color = 0;
	for ( j = 1 ;  j<= 151 ;  ++j )
	{
		Color = Color + 1;
		if ( Color > 15 )   
			Color = 1;
		Count = 0;
		Rate = Rate + 0.01;
		Popold = 0.01;
		for ( i = 1;  i <= MaxGen;  ++i )
		{
			Popnew = Rate * (Popold * (1 - Popold));
			X =int( Popold * MaxX);
			Y =int( MaxY -Popnew * MaxY);
			m_pDC->SetPixel(X, Y, GetColor(Color));
			if ( Popold == Popnew )  
				Count = Count + 1;
			else   Count = 0;
			if ( Count > 10 ) 
				i = MaxGen;
			Popold = Popnew;
		}
	}
	m_pDC->TextOut(MaxX*3/7, MaxY/2, "马尔萨斯引力图" );
}

CMalthus::DrawMalthus1()
{
	int       i, j, k, Color, Count;
	double    Popold, Popnew, Rate, X, Y;
	Popold = 0.0;
	Popnew = 0.0;
	Rate = 2.3;
	Y = 0;
	Color = 0;
	for ( j = 1 ;  j<= 15 ;  ++j )
	{
		Color = Color + 1;
		if ( Color > 15 )   
			Color = 1;
		for ( k = 1;  k <= 10;  ++k )
		{
			Count = 0;
			Rate = Rate + 0.01;
			Popold = 0.01;
			for ( i = 1;  i <= 10000;  ++i )
			{
				Popnew = Rate * (Popold * (1 - Popold));
				X = Popnew - Popold;
				m_pDC->SetPixel(int(X*MaxX/2+MaxX/2),int(MaxY/2-Y*MaxY/2), GetColor(Color));	
				if ( Popold == Popnew )   
					Count = Count + 1;
				else   Count = 0;
				if ( Count > 100 ) 
					i = 10000;
				Popold = Popnew;
				Y = X;
			}
		}
	}
	m_pDC->TextOut(MaxX/3, 80, "马尔萨斯引力图2" );
	Line(110, 140, 135, 240);
	Line(160, 140, 135, 240);
	m_pDC->TextOut(60, 245, "通过仔细观察可以看到,");
	m_pDC->TextOut(60, 265, "既使在这似乎是大片连续区域内");
	m_pDC->TextOut(60, 285, "也能找到例外(即不连续点)。");
	m_pDC->TextOut(60, 305, "类似情况可在土星周围的环上观");
	m_pDC->TextOut(60, 325, "察到,很可能是出于同样原因。");
}

⌨️ 快捷键说明

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