亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? worldmodel.cpp

?? 機器人足球AI設計比賽
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************************** *                                      SEU-3D *                     ------------------------------------------------- * Copyright (c) 2005, Yuan XU<xychn15@yahoo.com.cn>,Chang'e SHI<evelinesce@yahoo.com.cn> * Copyright (c) 2006, Yuan XU<xuyuan.cn@gmail.com>,Chunlu JIANG<JamAceWatermelon@gmail.com> * Southeast University ,China * All rights reserved. * * Additionally,this program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ****************************************************************************************/  #include "WorldModel.h" #include "Skill.h" #include "Formation.h"WorldModel::WorldModel(){	/** offside line */	_ourOffSideLine = max_field_length*0.5;	_oppOffSideLine = -_ourOffSideLine;}bool WorldModel::predictBallStateAfterNrSteps(	Vector3f &pos, Vector3f &prePos, Vector3f &preprePos,										Vector3f &vel, Vector3f &preVel, Vector3f &prepreVel,										int iStep,										int iStepMax ) const{	return _ball.predictStateAfterNrSteps( pos, prePos, preprePos,											 vel, preVel, prepreVel,											iStep,											iStepMax);}bool WorldModel::isGroundBall( const Vector3f &posBall, const Vector3f &prePosBall, const Vector3f &preprePosBall,						const Vector3f &velBall, const Vector3f &preVelBall, const Vector3f &prepreVelBall) const{	/*vector<float> nnInput;	nnInput.resize(6);	nnInput.push_back( posBall.z());	nnInput.push_back( prePosBall.z());	nnInput.push_back( preprePosBall.z());	nnInput.push_back( velBall.z());	nnInput.push_back( preVelBall.z());	nnInput.push_back( prepreVelBall.z());	return _nnIsGroundBall.sim( nnInput.begin() );	*/	return _ball.isGroundBall( posBall, prePosBall, preprePosBall,								velBall, preVelBall, prepreVelBall );}bool WorldModel::isBallStop( const float minSpeed ) const{	return _ball.isBallStop( getBallGlobalPos(), getBallGlobalPos(1), getBallGlobalPos(2),								getBallGlobalVel(), getBallGlobalVel(Step(1)), getBallGlobalVel(Step(2)) ,minSpeed);}/*!判斷是不是地滾球	\param 球的當前位置	\param 球的但前速度	\return 是不是地滾球*/bool WorldModel::isFallOnGround( const Vector3f &posBall, const Vector3f &prePosBall, const Vector3f &preprePosBall,						const Vector3f &velBall, const Vector3f &preVelBall, const Vector3f &prepreVelBall) const{	return _ball.isFallOnGround( posBall, prePosBall, preprePosBall,								velBall, preVelBall, prepreVelBall );}/*!判斷球是不是剛好落地反彈\param 球的當前位置\param 球的但前速度\return 是不是落地反彈*/bool WorldModel::isKickable( Vector3f posPlayer, Vector3f posBall ){	return getBallRelativePos().Length() < 3.0;}bool WorldModel::isKickable(){	return isKickable( getMyGlobalPos(), getBallGlobalPos() );}State2Ball WorldModel::predictOurFastest(){	if ( getBallRelativePos().Length() > max_kick_distance )		return S2B_ILLEGAL;	LOG( 40,"dist2ball: %f",getBallRelativePos().Length() );	LOG( 40,"realtive ball pos: %f, %f, %f ",getBallRelativePos().x(),getBallRelativePos().y(),getBallRelativePos().z());	//-* algorithm 1	//-- the fastest one is the one who is clostest to the first point	//-- it suits air ball, but not good enough for the ground ball	/*Vector3f posFight = _firstPoint;	float distMe = ( getMyGlobalPos() - posFight ).Length();	for ( int i=1; i<=11; i++ )	{		float distTeammate = ( getTeammateGlobalPos(i) - posFight ).Length();		if ( distTeammate < distMe - 1.0 )			return false;	}	return true;	*/		//-* algorithm 2	//-- predict all Player's need time when he intercept the ball	//-- its performance relay on the predictInterceptPos function	/*Step iStepIntercept = 0;	_prePosIntercept = _posIntercept;	_posIntercept = predictInterceptPos( iStepIntercept, getMyGlobalPos() );	if ( iStepIntercept >= max_intercept_steps ) return false;	LOG( 12,"my intercept step: %d",iStepIntercept);	//LOG( 12,"my intercept position: %f, %f, %f",_posIntercept.x(),_posIntercept.y(),_posIntercept.z());	Vector3f dPosIntercept = _posIntercept - _prePosIntercept; 	LOG( 12,"intercept delta: %f, %f, %f",dPosIntercept.x(),dPosIntercept.y(),dPosIntercept.z());	for ( unsigned int i=1; i<=11; i++ )	{		if ( i == getMyNum() ) continue;		Step teammateStep = 0;		predictInterceptPos( teammateStep, getTeammateGlobalPos(i), iStepIntercept+10 );		LOG( 40,"teammate[%d] step: %d",i,teammateStep);		if ( teammateStep < iStepIntercept - 3 )			return false;	}	return true;	*/		//-* algorithm 3	//-- 2005-10-27	//-- predict all Player's need *time*(in seconds) when he intercept the ball	//-- its performance relay on the predictInterceptPos function	//-- but it ne	/*Time myTime = 0;	_posIntercept = predictInterceptPos( myTime, getMyGlobalPos(), getMyGlobalVel() );	if ( myTime < 0.5 )		return S2B_FASTEST_TEAM;	if ( myTime >= max_intercept_time )		return S2B_ILLEGAL;	for ( unsigned int i=1; i<=teammates_num; i++ )	{		if ( i == getMyNum() ) continue;		Time teammateTime = 0;		predictInterceptPos( teammateTime, getTeammateGlobalPos(i), getTeammateGlobalVel(i),myTime+2 );		if ( teammateTime < myTime - 3*sim_step_time )			return S2B_ILLEGAL;	}	return S2B_FASTEST_TEAM;	*/	//-* algorithm 4	//-- 2005-11-22	//-- base on algorithm 3	//-- partition the same type and different type	Time myTime = 0;	_posIntercept = predictInterceptPos( myTime, getMyGlobalPos(), getMyGlobalVel() );	//_posIntercept = (_posIntercept + predictInterceptPos( myTime, getMyGlobalPos(), getMyGlobalVel() ))*0.5;	LOG( 40,"_posIntercept=( %f, %f, %f)",_posIntercept.x(),_posIntercept.y(),_posIntercept.z());	if ( myTime < 0.5 )		return S2B_FASTEST_TEAM;	if ( myTime >= max_intercept_time )		return S2B_ILLEGAL;	set<Num>::iterator iter;	Time teammateTime;	for ( iter=_sameTypeTeammateNum.begin(); iter!=_sameTypeTeammateNum.end(); iter++ )	{		teammateTime = 0;		predictInterceptPos( teammateTime, getTeammateGlobalPos(*iter), getTeammateGlobalVel(*iter),myTime+2 );		if ( teammateTime < myTime - 3*sim_step_time )			return S2B_ILLEGAL;	}	for ( iter=_diffTypeTeammateNum.begin(); iter!=_diffTypeTeammateNum.end(); iter++ )	{		teammateTime = 0;		predictInterceptPos( teammateTime, getTeammateGlobalPos(*iter), getTeammateGlobalVel(*iter),myTime+2 );		if ( teammateTime < myTime - 3*sim_step_time )			return S2B_FASTEST_TYPE;	}	return S2B_FASTEST_TEAM;}Vector3f WorldModel::getInterceptPos( const Vector3f &goal) const{	Vector3f pos;	Vector3f goalDriveLine( goal - _posIntercept);    goalDriveLine.Normalize();	pos[0] = _posIntercept[0] - goalDriveLine[0]*kick_pos_dist;	pos[1] = _posIntercept[1] - goalDriveLine[1]*kick_pos_dist;	pos[2] = _myself.getRadius();		return pos;}Vector3f WorldModel::predictInterceptPos(Step &iStepPre,										Vector3f posPlayer,										Step iStepMax ) const{	float mySpeed = 1.0;	//float mySpeed = real_agent_max_speed - 0.3;	Vector3f velBall = getBallGlobalVel();	//if ( velBall[0] > 0 )	//	mySpeed = real_agent_max_speed + 0.3;	//mySpeed*=0.5;//tmp test 2005-10-12	Vector3f posBall = getBallGlobalPos();	if ( (posBall - posPlayer).Length() > max_kick_distance )	{		iStepPre = iStepMax+1;		return vector3f_illegal;	}	Vector3f prePosBall = getBallGlobalPos(1);	Vector3f preprePosBall = getBallGlobalPos(2);	Vector3f preVelBall = getBallGlobalVel(1);	Vector3f prepreVelBall = getBallGlobalVel(2);			Vector3f posIntercept;	//default(默認截球位置,即球當前位置)	posIntercept = posBall;	float speedBall = getBallGlobalVel().Length();	float dist = sqrt((posBall[0] - posPlayer[0])*(posBall[0] - posPlayer[0])+(posBall[1] - posPlayer[1])*(posBall[1] - posPlayer[1]));	float runRadious = 0;	//球停止了,所以不用計算	//2005-10-04-test	//if ( speedBall < 0.1 && isGroundBall( posBall,velBall )	)		//if ( _ball.isBallStop( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall) )	//if ( speedBall < 0.2 && isGroundBall( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall)	)	if ( speedBall < 0.01 && isGroundBall( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall)	)	{		iStepPre = Second2Step(dist /  mySpeed);		return posIntercept;	}	//地滾球	else if ( isGroundBall(posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall) )//ground intercept!	{groundloop:		while( dist > runRadious )		{			iStepPre++;			predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall );			dist = sqrt((posBall[0] - posPlayer[0])*(posBall[0] - posPlayer[0])+(posBall[1] - posPlayer[1])*(posBall[1] - posPlayer[1]));			runRadious = mySpeed*sim_step_time*iStepPre;			if ( iStepPre > iStepMax ) break;		}	}	else//空中球	{		int iStepFly = 0;		while( dist > runRadious )		{			if ( isGroundBall( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall ) ) 				goto groundloop;//落地之后成為地滾球						predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall );			iStepFly = predictFirstPoint( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall );			iStepPre += (iStepFly + 1);			dist = sqrt((posBall[0] - posPlayer[0])*(posBall[0] - posPlayer[0])+(posBall[1] - posPlayer[1])*(posBall[1] - posPlayer[1]));			runRadious = mySpeed*sim_step_time*iStepPre;						if ( iStepPre > iStepMax ) break;		}	}		//predictBallStateAfterNrSteps(posBall,velBall,40);	posIntercept = posBall;	return posIntercept;}Vector3f WorldModel::predictInterceptPos(Time &time,										const Vector3f &posPlayer,										const Vector3f &velPlayer,										Time timeMax ) const{	Vector3f posBall = getBallGlobalPos();	if ( (posBall - posPlayer).Length() > max_kick_distance )	{//-* too far away, not consider		time = timeMax+1;		return vector3f_illegal;	}	const Step predicateSteps = step_num_per_cycle;	Vector3f prePosBall = getBallGlobalPos(1);	Vector3f preprePosBall = getBallGlobalPos(2);	Vector3f velBall = getBallGlobalVel();	Vector3f preVelBall = getBallGlobalVel(1);	Vector3f prepreVelBall = getBallGlobalVel(2);	Time ballTime = 0;	Skill::driveTo(posPlayer,velPlayer,posBall,Vector3f(0,0,0),time);	bool isBallOnGround = false;		//-- new add by XuYuan @2005-11-11	//-- close intercept, if I near the ball, and the ball's speed is slow	//-- directly intercept it.	//-- *TODO*	//-- the closeInterceptSpeed and closeInterceptDist should depend on the situation and opponent model	/*const float close_intercept_speed = 0.5;	const float close_intercept_dist = 1.0;	const float minDist = getMyRadius() + getBallRadius();	const Step close_intercept_Step = 3;	if ( _ball.isBallStop( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall,close_intercept_speed )		&& (posBall-posPlayer).Length() < close_intercept_dist )	{		//Vector3f PlayerPos = posPlayer;		//Vector3f PlayerVel = velPlayer;			for ( Step i=0; i< close_intercept_Step; i++ )		{			predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall,predicateSteps );			//predictPlayerStateAfterOneStep(PlayerPos,PlayerVel,getMyDriveForce());			if ( isCollide(posPlayer,posBall,minDist) )			{				posBall = prePosBall;				break;			}		}			return posBall;	}*/	//float speedBall = velBall.Length();	while ( time > ballTime && ballTime < timeMax )	{		//-- ball is stopped		/*if (  (speedBall < 0.5 && isGroundBall( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall) )			|| _ball.isBallStop( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall )	)		*/		if ( _ball.isBallStop( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall )	)		{			return posBall;		}		//-- ball is on the ground		else if ( isBallOnGround			|| isGroundBall(posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall) )//ground intercept!		{			isBallOnGround = true;			predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall,predicateSteps );			Skill::driveTo(posPlayer,velPlayer,posBall,Vector3f(0,0,0),time);			ballTime += Step2Second(predicateSteps);		}		//-- ball is on the air		else		{			Step iStepFly = predictFirstPoint( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall );			predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall,predicateSteps );			Skill::driveTo(posPlayer,velPlayer,posBall,Vector3f(0,0,0),time);			ballTime += Step2Second(iStepFly);			ballTime += Step2Second(predicateSteps);		}			}	return posBall;}int WorldModel::predictFirstPoint( Vector3f &posBall, Vector3f &prePosBall, Vector3f &preprePosBall,										Vector3f &velBall, Vector3f &preVelBall, Vector3f &prepreVelBall,										int iStepMax ) const{	int iFlySteps = 0;	while ( ! ( isFallOnGround( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall )  				|| isGroundBall( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall ) ) )	{		iFlySteps++;		predictBallStateAfterNrSteps( posBall,prePosBall,preprePosBall,velBall,preVelBall,prepreVelBall );		if ( iFlySteps > iStepMax ) break;	}	return iFlySteps;}bool WorldModel::predictPlayerStateAfterNrSteps(	Vector3f &pos,										Vector3f &vel,										int iStep,										int iStepMax ) const{	Vector3f power = _myself.getDriveForce();	/*Vector3f a = (power*0.4848 - vel*30)/14.43;	for ( int i=0;i<iStep;i++)	{		pos = pos + vel*sim_step_time;		//-* new adapt @2005-11-08-by-XuYuan		//-* S = S0 + V0*t + 0.5*a*t^2		//pos = pos + vel*sim_step_time + a*pow2(sim_step_time)*0.5; 		pos[2] = _myself.getRadius();		a = (power*0.4848 - vel*30)/14.43;		vel += a*sim_step_time;		vel[2] = 0;		if ( i > iStepMax ) return false;	}*/	for ( int i=0; i<iStep;i++)	{		predictPlayerStateAfterOneStep(pos,vel,power);		if ( i > iStepMax ) return false;	}	return true;}void WorldModel::predict(){	//-* 1.predict my global position and velocity in real time	predictRealTime();		//-* 2.predict first point;	Vector3f posBall = getBallGlobalPos();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品第一页| 亚洲激情校园春色| 91精品久久久久久久91蜜桃| 色婷婷av一区二区三区gif| va亚洲va日韩不卡在线观看| 高清成人免费视频| eeuss国产一区二区三区| av在线不卡网| 一本色道久久综合亚洲精品按摩| 99精品黄色片免费大全| 色综合天天综合在线视频| 一本一本大道香蕉久在线精品| 色呦呦国产精品| 91麻豆精品91久久久久久清纯 | 国产精品资源站在线| 麻豆精品国产91久久久久久| 精品在线免费视频| 国产精品一品二品| 99精品久久只有精品| 欧美在线你懂得| 日韩一卡二卡三卡| 国产色产综合色产在线视频| 亚洲美女视频在线| 日日噜噜夜夜狠狠视频欧美人| 久久精品国产99| 成人成人成人在线视频| 欧美日韩精品一区二区天天拍小说 | 一本色道久久综合亚洲91| 欧美日本视频在线| 国产丝袜欧美中文另类| 亚洲一区在线视频观看| 极品少妇xxxx精品少妇偷拍| 99riav久久精品riav| 欧美精品123区| 国产精品看片你懂得| 日韩高清一区二区| 99视频热这里只有精品免费| 正在播放亚洲一区| 国产精品国产精品国产专区不片| 亚洲sss视频在线视频| 国产99精品国产| 欧美一区二区日韩一区二区| 国产精品久久一卡二卡| 麻豆极品一区二区三区| 色婷婷国产精品综合在线观看| 精品日韩成人av| 亚洲综合小说图片| 成人av资源下载| 精品国产99国产精品| 亚洲国产成人va在线观看天堂| 国产精品456露脸| 欧美一区午夜视频在线观看| 亚洲老妇xxxxxx| 成人一区二区三区在线观看| 91精品国产91综合久久蜜臀| 亚洲免费资源在线播放| 国产成a人亚洲精| 欧美成人a∨高清免费观看| 亚洲一区二区三区在线播放| caoporm超碰国产精品| 久久综合九色综合欧美98 | 日韩欧美国产电影| 午夜精品久久一牛影视| 91久久免费观看| 日韩一区欧美一区| 成人国产视频在线观看| 欧美国产一区二区在线观看 | 综合久久国产九一剧情麻豆| 国产精品亚洲午夜一区二区三区| 日韩精品一区二区三区视频在线观看| 亚洲福利视频一区二区| 在线免费观看视频一区| 亚洲最快最全在线视频| 在线国产亚洲欧美| 亚洲国产日产av| 欧美日韩性生活| 亚洲成a人在线观看| 欧美日韩美女一区二区| 天堂一区二区在线| 91精品啪在线观看国产60岁| 麻豆精品蜜桃视频网站| 精品国产凹凸成av人导航| 国产麻豆91精品| 国产精品伦理一区二区| 色偷偷久久一区二区三区| 一区二区三区久久久| 欧美视频三区在线播放| 天堂一区二区在线| 久久亚洲综合色一区二区三区| 韩国理伦片一区二区三区在线播放| 精品国产91乱码一区二区三区 | 国产精品久久免费看| 91在线精品一区二区| 五月天亚洲精品| 日韩欧美高清一区| 国产成人精品一区二区三区网站观看| 国产精品视频在线看| 在线一区二区视频| 美洲天堂一区二卡三卡四卡视频| 久久久久高清精品| 91麻豆蜜桃一区二区三区| 亚洲成国产人片在线观看| 欧美精品一区二区三区蜜桃| aaa亚洲精品| 免费人成精品欧美精品| 中文字幕 久热精品 视频在线 | 亚洲桃色在线一区| 欧美三级日韩三级| 激情av综合网| 亚洲综合区在线| 久久精品一区二区三区不卡| 色视频成人在线观看免| 狠狠色狠狠色合久久伊人| 一区二区三区四区高清精品免费观看| 51午夜精品国产| 91丨porny丨国产| 久久国产生活片100| 一区二区三区在线观看视频| 26uuu精品一区二区在线观看| 91美女精品福利| 国产精品一区二区三区乱码| 亚洲国产精品麻豆| 自拍偷在线精品自拍偷无码专区| 欧美大片免费久久精品三p| 色88888久久久久久影院野外| 国产剧情一区二区| 午夜精品久久久久久| 亚洲欧美区自拍先锋| 26uuu精品一区二区在线观看| 欧美日韩高清在线播放| 色中色一区二区| 成人免费视频播放| 国内精品免费**视频| 日本三级韩国三级欧美三级| 亚洲免费在线观看| 中文字幕在线不卡| 国产精品嫩草影院av蜜臀| 日韩欧美国产高清| 日韩一区二区精品葵司在线| 欧美日韩一区二区不卡| 91丨九色丨国产丨porny| 国产激情精品久久久第一区二区 | 欧美日韩一级视频| 色欧美乱欧美15图片| 成人av在线一区二区| 成人一区二区三区| 成人a区在线观看| 93久久精品日日躁夜夜躁欧美| 粉嫩av一区二区三区在线播放| 韩国成人福利片在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 午夜不卡在线视频| 日韩电影在线观看电影| 蜜桃久久精品一区二区| 蜜桃av一区二区三区电影| 久久国产综合精品| 国产美女在线精品| 国产精品一品视频| 不卡一区二区三区四区| 成人av动漫在线| 在线观看亚洲一区| 9191成人精品久久| 久久亚洲捆绑美女| 日本一区二区三区视频视频| 国产精品国产自产拍在线| 亚洲精品国产无套在线观| 亚洲国产三级在线| 蜜臀久久99精品久久久画质超高清| 免费成人av在线| 国产成人午夜片在线观看高清观看| 国产91精品久久久久久久网曝门| 成人av在线一区二区三区| 91福利视频久久久久| 日韩免费在线观看| 中文字幕中文在线不卡住| 亚洲一区二区高清| 精品亚洲国产成人av制服丝袜| 国产99久久久国产精品免费看| 日本国产一区二区| 日韩免费成人网| 亚洲人吸女人奶水| 蜜臀av性久久久久蜜臀aⅴ| 风间由美性色一区二区三区| 色94色欧美sute亚洲13| 欧美成人精品3d动漫h| 中文字幕在线免费不卡| 五月激情综合网| 成人一级视频在线观看| 欧美日韩一区在线观看| 国产欧美久久久精品影院| 亚洲一卡二卡三卡四卡| 国产成人精品免费网站| 精品视频1区2区| 久久久久久久综合| 亚洲成人一区在线| 成人教育av在线| 日韩亚洲欧美综合| 亚洲久草在线视频| 丁香桃色午夜亚洲一区二区三区| 欧美日韩视频一区二区|