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

📄 restrictedrandwalk.cc

📁 this is source code for adhoc network using omnet
💻 CC
字号:
#include "h/restrictedRandWalk.h"Define_Module_Like(RestrictedRandWalk,Mobility);bool RestrictedRandWalk::rebound(int& x, int &y){	bool update=false;	int sigX = dX >=  0 ? 1 : -1;	int sigY = dY >=  0 ? 1 : -1;	d("rebound");	if( x < minX)	{		dX *= (-1); // change the sign		x = minX;		alfa = 3.14 - alfa;		update=true;	}	if( x > maxX)	{		x = maxX;		dX *= (-1);		update=true;		alfa = 3.14 - alfa;	}	if( y < minY)	{		dY *= -1;		y = minY;		alfa = 6.28 - alfa ;		update=true;	}	if( y > maxY)	{		dY *= -1;		y = maxY;		alfa = 6.28 - alfa;		update=true;	}	return update;}bool RestrictedRandWalk::torus(int &x, int &y){	bool update=false;	d("toru");	if( x < minX)	{		x = maxX;		update=true;	}	if( x > maxX)	{		x = minX;		update=true;	}	if( y < minY)	{		y = maxY;		update=true;	}	if( y > maxY)	{		y = minY;		update=true;	}	return update;}double RestrictedRandWalk::resRandomWalk(int& x, int& y){ 	double step;	//if the node has covered the defined distance chose a new direction	//and speed	if(steps == 0)	{		//choose the direction angle; considering the former direction,		//chose a new one among [alfa - PI/4, alfa + PI/4]		alfa = genk_uniform(1,( alfa - 0.785), ( alfa + 0.785));		//alfa = alfa + 0.785;		speed =  genk_uniform(3, speed - speedVar->doubleValue(), speed + speedVar->doubleValue() );		if( (speed > maxSpeed->doubleValue() ) || ( speed < minSpeed->doubleValue()) )			speed = genk_uniform(3,  minSpeed->doubleValue() ,   maxSpeed->doubleValue() );		//compute a single step length		step = moveInterval->doubleValue() * speed;		steps = step > 0  ? (int )( distance->doubleValue() / step) : 1;		stepsNum += steps;		partial += steps * speed;	}	step = moveInterval->doubleValue() * speed;	dX = (int) (step * cos(alfa));	dY = (int) (step * sin(alfa));	//do not go outside the map	if(0 == moveKind->boolValue())	{		//define new <x,y>		x = (x + dX);		y = (y + dY);		torus(x,y);	}	else	{		//define new <x,y>		x = (x + dX);		y = (y + dY);		rebound(x,y);	}	steps--;	return (double)moveInterval->doubleValue();}void RestrictedRandWalk::initialize(){	cGate *g = gate("out");	//pointer to the physic module that	//store tje actual position	physic =(Physic*) g->toGate()->ownerModule();	minX = 5;	maxX = (int)par("XRange") -5;	minY = 5;	maxY = (int)par("YRange") -5;	steps = 0;	moveInterval = &par("moveInterval");	moveKind = &par("movKind");	minSpeed = &par("minSpeed");	maxSpeed = &par("maxSpeed");	distance = &par("distance");	speedVar = &par("speedVariator");	//initialize the speed and the direction angle  that the node	//will use as initial settings	speed = genk_uniform(3, minSpeed->doubleValue(), maxSpeed->doubleValue());  	alfa = genk_uniform(1,0,6.27);	cMessage *moveMsg = new cMessage("Move");	//start miving	scheduleAt(simTime()+0.01, moveMsg);	//statistical variables	stepsNum =0;	partial = 0;	WATCH(dX);	WATCH(dY);	WATCH(speed);	WATCH(minX);	WATCH(maxX);	WATCH(minY);	WATCH(maxY);	WATCH(alfa);}void RestrictedRandWalk::handleMessage(cMessage *msg){	int x,y;	d("Restricted Random Mobility Model");	//get the current position from the physic module	physic->getPos(x, y);	//calcolate the new position	double time = resRandomWalk(x,y);	cMessage *moveMsg = new cMessage("Move",MOVE);	moveMsg->addPar("x") = x;	moveMsg->addPar("y") = y;	//inform to the physic module about	//the new position so it can be displayed	send(moveMsg,"out");	//tell to the physic module to move	scheduleAt(simTime() + time, msg);}void RestrictedRandWalk::finish(){	d("Restricted random says bye");	FILE* fout = fopen("collectedData.dat","a");	fprintf(fout,"\nSpeed average............... %.2f\n",partial/stepsNum);	fclose(fout);}

⌨️ 快捷键说明

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