📄 rpgm.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 + -