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

📄 rpgm.cpp

📁 These mobility generator tools are used to generate a rich set of mobility scenarios used to evalua
💻 CPP
字号:
//PARAMETER NEEDS TO BE CHANGED 
//.h file	group number, node numbers
//.cpp file  file name list
//deviation ratio = 0.1

#include "rpgm.h"


void read_checkpoint_file(int i,char* filename)
{
	double x_point;
	double y_point;
	double motion_interval;
	double x0,y0;

	FILE *checkpoint_fp;
	
	checkpoint_fp = fopen(filename,"r");
	if(checkpoint_fp == NULL)
	{	
		printf("CANNOT find checkpoint file!\n");
		exit(0);
	}

	fscanf(checkpoint_fp,"%lf %lf\n",&x0,&y0);
	ini_x[i]=x0,ini_y[i]=y0;

	num_of_checkpoint[i]=0;
	while(!feof(checkpoint_fp))
	{
		fscanf(checkpoint_fp,"%lf %lf %lf\n",&x_point,&y_point,&motion_interval);
		x_checkpoint[i][num_of_checkpoint[i]] = x_point;
		y_checkpoint[i][num_of_checkpoint[i]] = y_point;
		interval[i][num_of_checkpoint[i]] = motion_interval;
		//fflush(output_file);
		num_of_checkpoint[i]++;
	}
	current_checkpoint[i] = 0;
	fclose(checkpoint_fp);
}




void main()
{
	int i,j,k;
	FILE *output_fp;
	int input_d;
	float input_f;

	char** in_name;
	char out_name[20];

	printf("******************************************************\n");
	printf("*Welcome to the RPGM Mobility Generator by agroup@USC*\n");
	printf("******************************************************\n\n");

	printf("input Number of Groups:\n");
	scanf("%d",&input_d);
	GROUP_NUMBERS = input_d;

	printf("input Number of Node per group:\n");
	scanf("%d",&input_d);
	NODE_NUMBERS = input_d;

	printf("input the Speed Deviation:\n");
	scanf("%f",&input_f);
	SPEED_DEVIATION = input_f;

	printf("input the Angle Deviation (in degree):\n");
	scanf("%f",&input_f);
	ANGLE_DEVIATION = input_f/180*PI;

	in_name = new char* [GROUP_NUMBERS];
	for(i=0;i<GROUP_NUMBERS;i++)
		in_name[i] = new char[20];
	
	printf("input the Filename of the original trace files:\n");
	for(i=0;i<GROUP_NUMBERS;i++)
	{
		printf("please input the reference point trace filename of %dth group leader:\n",i+1);
		scanf("%s", in_name[i]);
	}
	printf("input the Filename of the Trace Output File:\n");
	scanf("%s", out_name);
	

	///////////////////////////////////////////////////
	mobilenode = new class Node* [GROUP_NUMBERS];
	for(i=0;i<GROUP_NUMBERS;i++)
		mobilenode[i] = new class Node[NODE_NUMBERS];

	main_angle = new double[GROUP_NUMBERS];	//leader's angle
	main_speed = new double[GROUP_NUMBERS];	//leader's speed
	current_checkpoint = new int[GROUP_NUMBERS];
	num_of_checkpoint = new int[GROUP_NUMBERS];
	next_stop_time = new int[GROUP_NUMBERS];

	ini_x = new double[GROUP_NUMBERS];
	ini_y = new double[GROUP_NUMBERS];

	x_checkpoint = new double* [GROUP_NUMBERS];
	for(i=0;i<GROUP_NUMBERS;i++)
		x_checkpoint[i] = new double[MAXNUM_CHECKPOINT];

	y_checkpoint = new double* [GROUP_NUMBERS];
	for(i=0;i<GROUP_NUMBERS;i++)
		y_checkpoint[i] = new double[MAXNUM_CHECKPOINT];

	interval = new double* [GROUP_NUMBERS];
	for(i=0;i<GROUP_NUMBERS;i++)
		interval[i] = new double[MAXNUM_CHECKPOINT];

		output_fp = fopen(out_name,"w");
		if(output_fp == NULL)
		{
			printf("Error opening output file!\n");
			exit(1);
		}
		//printf("LABEL=%s\n",out_name[m]);

		for(i=0;i<GROUP_NUMBERS;i++)
		{	
			read_checkpoint_file(i,in_name[i]);
		}

		/*
		for(i=0;i<GROUP_NUMBERS;i++)
		{
			printf("ini=%f,%f\n",ini_x[i],ini_y[i]);
			for(j=0;j<num_of_checkpoint[i];j++)
				printf("--%f %f,%f\n",x_checkpoint[i][j],y_checkpoint[i][j],interval[i][j]);
			printf("num_check=%d,cur_check=%d\n\n",num_of_checkpoint[i],current_checkpoint[i]);
		}
		*/

		for(i=0;i<GROUP_NUMBERS;i++)
			for(j=0;j<NODE_NUMBERS;j++)
			{
				mobilenode[i][j].initialize(i,j,output_fp);
				//fprintf(output_fp,"$node_(%d) set X_ %f\n",id,src_x);
				//fprintf(output_fp,"$node_(%d) set Y_ %f\n",id,src_y);
			}

		current_clock=0;

		for(i=0;i<GROUP_NUMBERS;i++)
		{
			next_stop_time[i]=0;
			current_checkpoint[i]=0;
		}

		while(current_clock < SIMULATION_TIME)
		{
			for(i=0;i<GROUP_NUMBERS;i++)
				for(j=0;j<NODE_NUMBERS;j++)
				{
					mobilenode[i][j].update(i,j);
					//mobilenode[i].show_trace();
					//mobilenode[i][j].save_trace(output_fp);
				}
			current_clock++;
		}


		for(i=SIMULATION_TIME-1;i>-1;i--)
			for(j=0;j<GROUP_NUMBERS;j++)
				for(k=0;k<NODE_NUMBERS;k++)
					mobilenode[j][k].save_trace(output_fp,i); 
		
		fclose(output_fp);
		for(i=0;i<GROUP_NUMBERS;i++){
			delete [] mobilenode[i];
			delete [] x_checkpoint[i];
			delete [] y_checkpoint[i];
			delete [] interval[i];
		}

		delete [] main_angle;
		delete [] main_speed;	
		delete [] current_checkpoint;
		delete [] num_of_checkpoint;
		delete [] next_stop_time;
		delete [] ini_x;
		delete [] ini_y;
}


⌨️ 快捷键说明

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