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

📄 worldmodel.cpp

📁 robocup3d源化码 Nexus3D.tar.gz
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    return mMyPos;}TTeamIndex WorldModel::GetMyTeam(){    return mTeamIndex;}float WorldModel::GetMinimalKickDistance(){    return mAgentRadius + mBallRadius + 0.04;}int WorldModel::GetTeamUnum(){    return mTeamUnum;}void WorldModel::SetTeamName(std::string name){    mTeamName =   name;}string WorldModel::GetTeamName(){    return mTeamName;}void WorldModel:: SetOppTeamName(std::string name){    mOppTeamName = name;}string WorldModel::GetOppTeamName(){       return mOppTeamName;}float WorldModel::string2float (){	int tmp,exp,sign;//tmp: number of digits after floating points.	float output;	sign=1;	tmp=0;	exp=0;	output=0;	while(input_string[parse_counter]==' ')		parse_counter++;	while(((input_string[parse_counter]>='0'&&input_string[parse_counter]<='9')||input_string[parse_counter]=='.'||input_string[parse_counter]=='-'))	{		if(input_string[parse_counter]=='-')		{			sign*=-1;			parse_counter++;			continue;		}		if(input_string[parse_counter]=='.')		{			tmp=1;			parse_counter++;			continue;		}		if(input_string[parse_counter]>='0'&& input_string[parse_counter]<='9')		{			exp+=tmp;			output*=10;			output+=input_string[parse_counter]-'0';			parse_counter++;		}	}	output*=pow(10.0,-exp); 	output*=sign;	return(output);}void WorldModel::parse_vision_object(int index){	parse_counter++;	while((input_string[parse_counter]<'0' || input_string[parse_counter]>'9')&&(input_string[parse_counter]!='-'))		parse_counter++;	static_objects_polar_relpos2me[index].distance=string2float();	static_objects_polar_relpos2me[index].theta=string2float();	static_objects_polar_relpos2me[index].phi=string2float();	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;	static_objects_polar_relpos2me[index].is_new=true;}void WorldModel::parse_flags(){	while(input_string[parse_counter]!='(')		parse_counter++;	while(input_string[parse_counter]!='1' && input_string[parse_counter]!='2')		parse_counter++;	if(input_string[parse_counter]=='1')	{		parse_counter+=2;		if(input_string[parse_counter]=='l')			parse_vision_object(VO_FLAG1L);		if(input_string[parse_counter]=='r')			parse_vision_object(VO_FLAG1R);	}	if(input_string[parse_counter]=='2')	{		parse_counter+=2;		if(input_string[parse_counter]=='l')			parse_vision_object(VO_FLAG2L);		if(input_string[parse_counter]=='r')			parse_vision_object(VO_FLAG2R);	}}void WorldModel::parse_goals(){	while(input_string[parse_counter]!='(')		parse_counter++;	while(input_string[parse_counter]!='1'&&input_string[parse_counter]!='2')		parse_counter++;	if(input_string[parse_counter]=='1')	{		parse_counter+=2;		if(input_string[parse_counter]=='l')			parse_vision_object(VO_GOAL1L);		if(input_string[parse_counter]=='r')			parse_vision_object(VO_GOAL1R);	}	if(input_string[parse_counter]=='2')	{		parse_counter+=2;		if(input_string[parse_counter]=='l')			parse_vision_object(VO_GOAL2L);		if(input_string[parse_counter]=='r')			parse_vision_object(VO_GOAL2R);	}}void WorldModel::parse_ball(){	while((input_string[parse_counter]<'0' || input_string[parse_counter]>'9')&&(input_string[parse_counter]!='-'))		parse_counter++;	static_objects_polar_relpos2me[VO_BALL].distance=string2float();	static_objects_polar_relpos2me[VO_BALL].theta=string2float();	static_objects_polar_relpos2me[VO_BALL].phi=string2float();	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;	static_objects_polar_relpos2me[VO_BALL].is_new=true;}void WorldModel::parse_player(){	int index=0;	int team_id;	int player_id;	char team_name[50];	while(input_string[parse_counter]!='m')//parses input string upto 'team' term.		parse_counter++;	parse_counter++;	while(input_string[parse_counter]==' ')		parse_counter++;	while(input_string[parse_counter]!=')')		team_name[index++]=input_string[parse_counter++];	team_name[index]='\0';	if(!strcmp(team_name, MyTeamName.c_str()))		team_id=0; //our team	else	{		if(!sw_their_team_name)		{			TheirTeamName = team_name;			sw_their_team_name = true;		}		team_id=1; //oponent team	}	while((input_string[parse_counter]<'0'|| input_string[parse_counter]>'9')&&(input_string[parse_counter]!='-'))		parse_counter++;	player_id=(int)string2float();	while((input_string[parse_counter]<'0'|| input_string[parse_counter]>'9')&&(input_string[parse_counter]!='-'))		parse_counter++;	players_polar_relpos2me[team_id][player_id].distance=(float)string2float();	players_polar_relpos2me[team_id][player_id].theta=(float)string2float();	players_polar_relpos2me[team_id][player_id].phi=(float)string2float();	players_polar_relpos2me[team_id][player_id].is_new=true;	//DoLog(LOG_PARSE,"team_id=%d, player_id=%d, (%.2f,%.2f,%.2f)",team_id,player_id,players_polar_relpos2me[team_id][player_id].distance,players_polar_relpos2me[team_id][player_id].theta,players_polar_relpos2me[team_id][player_id].phi);	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;	while(input_string[parse_counter]!=')')		parse_counter++;	parse_counter++;}void WorldModel::ResetObjects(){	int i;	for(i=0; i<9; i++)		static_objects_polar_relpos2me[i].is_new = false;	for(i=1; i<12; i++)	{		players_polar_relpos2me[0][i].is_new = false;		players_polar_relpos2me[1][i].is_new = false;	}}void WorldModel::set_my_position(){	/* find the nearset flag to me*/	float dist1 = 1000.0, dist2 = 1000.0, dist3 = 1000.0;	int index1 = 1, index2 = 2, index3 = 3;	for(int i=1;i<9;i++)		if(static_objects_polar_relpos2me[i].is_new && static_objects_polar_relpos2me[i].distance < dist1)		{			index1 = i;			dist1 = static_objects_polar_relpos2me[i].distance;		}	for(int i=1;i<9;i++)		if(static_objects_polar_relpos2me[i].is_new && static_objects_polar_relpos2me[i].distance < dist2 && i != index1)		{			index2 = i;			dist2 = static_objects_polar_relpos2me[i].distance;		}	for(int i=1;i<9;i++)		if(static_objects_polar_relpos2me[i].is_new && static_objects_polar_relpos2me[i].distance < dist3 && i != index1 && i != index2)		{			index3 = i;			dist3 = static_objects_polar_relpos2me[i].distance;		}	DoLog(LOG_PARSE,"object[%d].pos(%.2f, %.2f, %.2f), dist=%.2f",index1,object[index1].pos[0],object[index1].pos[1],object[index1].pos[2],dist1);	DoLog(LOG_PARSE,"object[%d].pos(%.2f, %.2f, %.2f), dist=%.2f",index2,object[index2].pos[0],object[index2].pos[1],object[index2].pos[2],dist2);	DoLog(LOG_PARSE,"object[%d].pos(%.2f, %.2f, %.2f), dist=%.2f",index3,object[index3].pos[0],object[index3].pos[1],object[index3].pos[2],dist3);	/* calculate my Vector3fesian position */	Vector3f pos1 = pol2vector(static_objects_polar_relpos2me[index1])*-1 + object[index1].pos;	Vector3f pos2 = pol2vector(static_objects_polar_relpos2me[index2])*-1 + object[index2].pos;	Vector3f pos3 = pol2vector(static_objects_polar_relpos2me[index3])*-1 + object[index3].pos;	DoLog(LOG_PARSE,"pos1=(%.2f, %.2f, %.2f)",pos1[0],pos1[1],pos1[2]);	DoLog(LOG_PARSE,"pos2=(%.2f, %.2f, %.2f)",pos2[0],pos2[1],pos2[2]);	DoLog(LOG_PARSE,"pos2=(%.2f, %.2f, %.2f)",pos3[0],pos3[1],pos3[2]);	//self.Update(pol2vector(static_objects_polar_relpos2me[index1])*-1 + object[index1].pos, static_objects_polar_relpos2me[VO_BALL].distance);	self.Update((pos1+pos2+pos3)/3, static_objects_polar_relpos2me[VO_BALL].distance);	DoLog(LOG_UPDATE,"is new %d",self.is_seen);	DoLog(LOG_UPDATE,"Positions    self  x     %f y     %f z     %f",self.pos[0],self.pos[1],self.pos[2]);	DoLog(LOG_UPDATE,"velacity     self  x     %f y     %f z     %f",self.vel[0],self.vel[1],self.vel[2]);	DoLog(LOG_UPDATE,"accelaration self  x     %f y     %f z     %f",self.acc[0],self.acc[1],self.acc[2]);	DoLog(LOG_PARSE,"self pos = (%.2f, %.2f, %.2f)",self.pos[0] ,self.pos[1] ,self.pos[2]);}void WorldModel::set_ball_position(){	DoLog(LOG_POS,"my pos = (%.2f, %.2f, %.2f)",self.pos[0] ,self.pos[1] ,self.pos[2]);	if(static_objects_polar_relpos2me[VO_BALL].is_new)	{		ball.Update( self.pos + (pol2vector(static_objects_polar_relpos2me[VO_BALL])),static_objects_polar_relpos2me[VO_BALL].distance);		DoLog(LOG_UPDATE,"is new %d",ball.is_seen);		DoLog(LOG_UPDATE,"Positions    ball  x     %f y     %f z     %f",ball.pos[0],ball.pos[1],ball.pos[2]);		DoLog(LOG_UPDATE,"velacity     ball  x     %f y     %f z     %f",ball.vel[0],ball.vel[1],ball.vel[2]);		DoLog(LOG_UPDATE,"accelaration ball  x     %f y     %f z     %f",ball.acc[0],ball.acc[1],ball.acc[2]);	}	else	{		ball.Update();		DoLog(LOG_UPDATE,"is new %d",ball.is_seen);		DoLog(LOG_UPDATE,"Positions    ball  x     %f y     %f z     %f",ball.pos[0],ball.pos[1],ball.pos[2]);		DoLog(LOG_UPDATE,"velacity     ball  x     %f y     %f z     %f",ball.vel[0],ball.vel[1],ball.vel[2]);		DoLog(LOG_UPDATE,"accelaration ball  x     %f y     %f z     %f",ball.acc[0],ball.acc[1],ball.acc[2]);	}	DoLog(LOG_PARSE,"ball pos = (%.2f, %.2f, %.2f)",ball.pos[0] ,ball.pos[1] ,ball.pos[2]);	MyPlayer[MyNumber].Update(self.pos, 0.0f);}void WorldModel::set_players_position(){	DoLog(LOG_UPDATE,"player infotmation ");	for(int i=1;i<12;i++)	{		if(i != MyNumber)		{			if(players_polar_relpos2me[0][i].is_new)			{				MyPlayer [i].Update(self.pos + (pol2vector(players_polar_relpos2me[0][i])),players_polar_relpos2me[0][i].distance);				DoLog(LOG_UPDATE,"is new %d",MyPlayer[i].is_seen);				DoLog(LOG_UPDATE,"Positions    player Number[%d]  x     %f y     %f z     %f",i,MyPlayer[i].pos[0], MyPlayer[i].pos[1], MyPlayer[i].pos[2]);				DoLog(LOG_UPDATE,"velacity     player Number[%d]  x     %f y     %f z     %f",i,MyPlayer[i].vel[0], MyPlayer[i].vel[1], MyPlayer[i].vel[2]);				DoLog(LOG_UPDATE,"accelaration player Number[%d]  x     %f y     %f z     %f",i,MyPlayer[i].acc[0], MyPlayer[i].acc[1], MyPlayer[i].acc[2]);			}			else			{				MyPlayer [i].Update();				DoLog(LOG_UPDATE,"is new %d",MyPlayer[i].is_seen);				DoLog(LOG_UPDATE,"Positions    player Number[%d]  x     %f y     %f z     %f",i,MyPlayer [i].pos[0],MyPlayer [i].pos[1],MyPlayer [i].pos[2]);				DoLog(LOG_UPDATE,"velacity     player Number[%d]  x     %f y     %f z     %f",i,MyPlayer [i].vel[0],MyPlayer [i].vel[1],MyPlayer [i].vel[2]);				DoLog(LOG_UPDATE,"accelaration player Number[%d]  x     %f y     %f z     %f",i,MyPlayer [i].acc[0],MyPlayer [i].acc[1],MyPlayer [i].acc[2]);			}		}		if(players_polar_relpos2me[1][i].is_new)			TheirPlayer[i].Update(self.pos + (pol2vector(players_polar_relpos2me[1][i])),players_polar_relpos2me[1][i].distance);		else			TheirPlayer[i].Update();		DoLog(LOG_PARSE,"my_player[%d].pos = (%.2f, %.2f, %.2f)",i,MyPlayer[i].pos[0] ,MyPlayer[i].pos[1] ,MyPlayer[i].pos[2]);		DoLog(LOG_PARSE,"thier_player[%d].pos = (%.2f, %.2f, %.2f)",i,TheirPlayer[i].pos[0] ,TheirPlayer[i].pos[1] ,TheirPlayer[i].pos[2]);	}}void WorldModel::parse_vision(const char * str){	ResetObjects();	strcpy(input_string,str);	parse_counter=0;	while(input_string[parse_counter]!='(')		parse_counter++;	while(input_string[parse_counter]!='V')//vision message		parse_counter++;	while(input_string[parse_counter]!='(')		parse_counter++;	parse_counter++;	while(input_string[parse_counter]==' ')		parse_counter++;	while(input_string[parse_counter]!='\0')	{		 switch(input_string[parse_counter])		{			case 'F'://flag				parse_flags();				break;			case 'G'://goal				parse_goals();				break;			case 'B'://ball				parse_ball();				break;			case 'P'://player				parse_player();				break;		}		while(input_string[parse_counter]!='('&&input_string[parse_counter]!='\0'){			parse_counter++;			//DoLog(LOG_PARSE,"\n %d",parse_counter );		}		if(input_string[parse_counter]!='\0'){		 	 parse_counter++;			 //(LOG_PARSE,"\n %d",parse_counter );		}	}	set_my_position();	set_ball_position();	set_players_position();}

⌨️ 快捷键说明

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