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

📄 global.cpp

📁 robocup3d源化码 Nexus3D.tar.gz
💻 CPP
字号:
/*Copyright (C) 2005 Ferdowsi University*/#include "global.h" #include <zeitgeist/zeitgeist.h>using namespace zeitgeist;namespace global{/************* variables ***************/	// field parameters	float FieldLength = 105.0;	float FieldWidth = 68.0;	float FieldHeight = 20.0;	float GoalWidth = 7.32;	float GoalDepth = 2.0;	float GoalHeight = 2.44;	float BorderSize = 4.0f;	// agent parameters	int AgentMass = 75;	float AgentRadius = 0.22;	int AgentMaxSpeed = 10;	// ball parameters	float BallRadius = 0.111;	float BallMass = 0.4;	float KickDistance = AgentRadius + BallRadius + 0.07;//0.15;//04;	float MinKickDistance = AgentRadius + BallRadius + 0.04;//04;/************* variables ***************/	// the playes uniform number, if left to zero the server will allocate	// the next free unum	int MyNumber = 0;	// the default team name	string MyTeamName = "";	string TheirTeamName = "";	LogUnit logunit;	Player MyPlayer[12];	Player TheirPlayer[12];	FieldObject object[9];	Ball ball;	MySelf self;	TTeamIndex TeamIndex;	float CurrentTime;	ActionInfo action_info;	bool do_beam_on_kickof=true;	AdjustKickPosition AdjustKickPos;	Vector3f predicted_ball_pos[41];	int stop_index;	Field FieldInfo;	Tackle tackle;/************* functions ***************/	float Deg2Rad(float deg)	{		return (deg*PI)/180.0f;	}	float Rad2Deg(float x)	{		return float(x*57.2958);	}	float ATan(float x){		//DoLog(LOG_POS,"ATan(%.2f)=%.2f",x,float(Rad2Deg(float(atan(x)))));		return float(Rad2Deg(float(atan(x))));	}	float Tan(float deg){		return float(tan(Deg2Rad(deg)));	}	Vector3f pol2vector(pol tmp)	{		Vector3f i;		i[0]=tmp.distance*(float)cos(Deg2Rad(tmp.phi))*(float)cos(Deg2Rad(tmp.theta));		i[1]=tmp.distance*(float)cos(Deg2Rad(tmp.phi))*(float)sin(Deg2Rad(tmp.theta));		i[2]=tmp.distance*(float)sin(Deg2Rad(tmp.phi));		return i;	}	void InitObjects()	{	       	if(TeamIndex == TI_LEFT){			object[VO_FLAG1L].pos = Vector3f(-FieldLength/2, -FieldWidth/2, 0.0);			object[VO_FLAG1R].pos = Vector3f(FieldLength/2, -FieldWidth/2, 0.0);			object[VO_FLAG2L].pos = Vector3f(-FieldLength/2, FieldWidth/2, 0.0);			object[VO_FLAG2R].pos = Vector3f(FieldLength/2, FieldWidth/2, 0.0);			object[VO_GOAL1L].pos = Vector3f(-FieldLength/2, -GoalWidth/2, 0.0);			object[VO_GOAL1R].pos = Vector3f(FieldLength/2, -GoalWidth/2, 0.0);			object[VO_GOAL2L].pos = Vector3f(-FieldLength/2, GoalWidth/2, 0.0);			object[VO_GOAL2R].pos = Vector3f(FieldLength/2, GoalWidth/2, 0.0);		}		else{			object[VO_FLAG1L].pos = Vector3f(FieldLength/2, FieldWidth/2, 0.0);			object[VO_FLAG1R].pos = Vector3f(-FieldLength/2, FieldWidth/2, 0.0);			object[VO_FLAG2L].pos = Vector3f(FieldLength/2, -FieldWidth/2, 0.0);			object[VO_FLAG2R].pos = Vector3f(-FieldLength/2, -FieldWidth/2, 0.0);			object[VO_GOAL1L].pos = Vector3f(FieldLength/2, GoalWidth/2, 0.0);			object[VO_GOAL1R].pos = Vector3f(-FieldLength/2, GoalWidth/2, 0.0);			object[VO_GOAL2L].pos = Vector3f(FieldLength/2, -GoalWidth/2, 0.0);			object[VO_GOAL2R].pos = Vector3f(-FieldLength/2, -GoalWidth/2, 0.0);		}	}	float NormalizeAngle(float ang,float min=-180.0f){		while(ang>=360+min) ang-=360;		while(ang<min) ang+=360;		return ang;	}	float MidAngle(float ang1,float ang2){		float ang=NormalizeAngle(ang2-ang1,0.0f);		//DoLog(LOG_POS,"ang1=%.2f   ang2=%.2f   midang=%.2f",ang1,ang2,NormalizeAngle(ang1+ang/2.0f));		return NormalizeAngle(ang1+ang/2.0f);	}	float GetSlopeOfMidAngle(float ang1,float ang2){		return -Tan(MidAngle(ang1,ang2));	}	// simulating if the ball can be intercepted while shooting	bool OpponentCanIntercept(Vector3f ball_vel){		float MinVel = 0.3;		float radious[12]={0};		float MaxPlayerSpeed = 0.25; //meter per cycle		Vector3f ball_pos = ball.pos;		Vector3f ball_decay;		ball_pos[0] = 0.0;		ball_vel[0] = 0.0;		Vector3f temp = ball_vel;		while(ball_vel.Length() > MinVel){			if(fabs(ball_vel[0])>1.5) ball_decay[0]=0.78;			else if(fabs(ball_vel[0])>1) ball_decay[0]=0.80;			else if(fabs(ball_vel[0])>0.85) ball_decay[0]=0.85;			else ball_decay[0]=0.88;			if(fabs(ball_vel[1])>1.5) ball_decay[1]=0.78;			else if(fabs(ball_vel[1])>1) ball_decay[1]=0.80;			else if(fabs(ball_vel[1])>0.85) ball_decay[1]=0.85;			else ball_decay[1]=0.88;			ball_pos = ball_pos + ball_vel;			ball_vel[0]=ball_vel[0]*ball_decay[0];			ball_vel[1]=ball_vel[1]*ball_decay[1];		}		Vector3f target = ball_pos;		// this while simulates each cycle		ball_pos = ball.pos;		ball_vel = temp;		while(ball_vel.Length() > MinVel){			if(fabs(ball_vel[0])>1.5) ball_decay[0]=0.78;			else if(fabs(ball_vel[0])>1) ball_decay[0]=0.80;			else if(fabs(ball_vel[0])>0.85) ball_decay[0]=0.85;			else ball_decay[0]=0.88;			if(fabs(ball_vel[1])>1.5) ball_decay[1]=0.78;			else if(fabs(ball_vel[1])>1) ball_decay[1]=0.80;			else if(fabs(ball_vel[1])>0.85) ball_decay[1]=0.85;			else ball_decay[1]=0.88;			ball_pos = ball_pos + ball_vel;			ball_vel[0]=ball_vel[0]*ball_decay[0];			ball_vel[1]=ball_vel[1]*ball_decay[1];			for(int i=1;i<12;i++){				radious[i] += MaxPlayerSpeed;				if((ball_pos - TheirPlayer[i].pos).Length() < radious[i] || (target - TheirPlayer[i].pos).Length() - radious[i] < 4)					return true; // opponent can intercept the ball!			}		}		return false;	}}

⌨️ 快捷键说明

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