#if !defined(AFX_RND_H__13D8F365_1AAD_49C1_8EA8_BE0AB3681FFA__INCLUDED_)
#define AFX_RND_H__13D8F365_1AAD_49C1_8EA8_BE0AB3681FFA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CRnd
{
public:
CRnd();
virtual ~CRnd();
/*! @function
********************************************************************************
<PRE>
函数名 : GetRand
功能 : 产生某个区间的随机数
参数 : [IN] nMin :区间最小值
[IN] nMax : 区间最大值
[IN] bLikeSinusoid : 是否类似正弦分布
返回值 : 符合条件的随机数
抛出异常 : -
--------------------------------------------------------------------------------
备注 :
典型用法 : int rnd = CRnd::GetRand(0,100);
--------------------------------------------------------------------------------
</PRE>
*******************************************************************************/
static int GetRand(int nMin,int nMax,BOOL bLikeSinusoid=FALSE);
/*! @function
********************************************************************************
<PRE>
函数名 : GetRand
功能 : 产生某个区间的随机数
参数 : [IN] nMin :区间最小值
[IN] nMax : 区间最大值
[IN] bLikeSinusoid : 是否类似正弦分布
返回值 : 符合条件的随机数
抛出异常 : -
--------------------------------------------------------------------------------
备注 :
典型用法 : int rnd = CRnd::GetRand(0,100);
--------------------------------------------------------------------------------
</PRE>
*******************************************************************************/
static float GetRand(float fMin,float fMax,BOOL bLikeSinusoid=FALSE);
private:
static unsigned int s_seed;
};
#endif // !defined(AFX_RND_H__13D8F365_1AAD_49C1_8EA8_BE0AB3681FFA__INCLUDED_)
// Rnd.cpp: implementation of the CRnd class.
//
//////////////////////////////////////////////////////////////////////
/*! @file
********************************************************************************
<PRE>
模块名 : 随机函数产生类实现文件
文件名 : Rnd.cpp
相关文件 : Rnd.h
文件实现功能 : 实现产生随机函数的静态函数
作者 : Duan Jihua
版本 : 1.0
--------------------------------------------------------------------------------
备注 : -
--------------------------------------------------------------------------------
修改记录 :
日 期 版本 修改人 修改内容
2005/08/16 1.0 Duan Jihua 创建
</PRE>
********************************************************************************
* 版权所有(c) 2005, Duan Jihua, 保留所有权利
*******************************************************************************/
#include "stdafx.h"
#include "Rnd.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
unsigned int CRnd::s_seed=NULL;
CRnd::CRnd()
{
}
CRnd::~CRnd()
{
}
int CRnd::GetRand(int nMin,int nMax,BOOL bLikeSinusoid)
{
if (s_seed == NULL) {
s_seed = (unsigned int) time(NULL);
srand(s_seed);
}
if (! bLikeSinusoid) {
// return nMin + (int)((nMax - nMin) * (rand() * 1.0 / RAND_MAX )) ;
return nMin + rand() % (nMax - nMin);
}
else{
return nMin + (int)((nMax - nMin) * sin(rand() * 1.0 / RAND_MAX ) );
}
}
float CRnd::GetRand(float fMin,float fMax,BOOL bLikeSinusoid)
{
if (s_seed == NULL) {
s_seed = (unsigned int) time(NULL);
srand(s_seed);
}
if (! bLikeSinusoid) {
return fMin +(float) ((fMax - fMin) * (rand() * 1.0 / RAND_MAX )) ;
}
else{
return fMin + (float)((fMax - fMin) * sin(rand() * 1.0 / RAND_MAX )) ;
}
}