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

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

?? worldmodel.cpp

?? 機器人足球實現的核心代碼
?? CPP
字號:
#include "Worldmodel.h"

void WorldModel::makeCommand( TCommand *com, CommandTypeT comType, double comP0, double comP1 )
{
	com->CommandType = comType;
	com->ComParam0	 = comP0;
	com->ComParam1   = comP1;
}

/*! This method determines the angle that should be sent to the soccerserver
when
the player wants to turn angDesiredAngle. This value depends on the current
velocity and the inertia moment of the player
\param angDesiredAngle angle that player wants to turn
\param dSpeed current speed of the player
\return angle that can be sent with turn command */
AngDeg WorldModel::getAngleForTurn( AngDeg angDesiredAngle, double dSpeed )
{
    AngDeg a = angDesiredAngle * (1.0 + CINERTIAMOMENT * dSpeed );
    if( a > CMAXMOMENT )
        return CMAXMOMENT ;
    else if ( a < CMINMOMENT )
        return CMINMOMENT ;
    else
        return a;
}

/*! This method determines the actual angle that is used when 'angTurn' is
sent to the SoccerServer. This value depends on the current velocity and
the inertia moment of the player
\param angAngleForSend angle send with turn command
\param dSpeed current speed of the player
\return actual angle that player is turned */
AngDeg WorldModel::getActualTurnAngle( AngDeg angTurn,double dSpeed )
{
    return angTurn / (1.0 + CINERTIAMOMENT * dSpeed );
}


/*! This method determines the optimal dash power to mantain an optimal speed
When the current speed is too high and the distance is very small, a
negative dash is performed. Otherwise the difference with the maximal speed
is determined and the dash power rate is set to compensate for this
difference.
\param posRelTo relative point to which we want to dash
\param angBody body angle of the agent
\param vel current velocity of the agent
\param dEffort current effort of the player
\param iCycles desired number of cycles to reach this point
\return dash power that should be sent with dash command */
double WorldModel::getPowerForDash( VecPosition posRelTo, AngDeg angBody,
                                    VecPosition vel, double dEffort, int iCycles )
{
    // the distance desired is the x-direction to the relative position we
    // we want to move to. If point lies far away, we dash maximal. Furthermore
    // we subtract the x contribution of the velocity because it is not necessary
    // to dash maximal.
    double dDist = posRelTo.rotate(-angBody).getX(); // get distance in direction
    if( iCycles <= 0 ) iCycles = 1;
    double dAcc  = getFirstSpeedFromDist(dDist,iCycles,CMAXROBOTDECAY);
    // get speed to travel now
    if( dAcc > CMAXROBOTV )             // if too far away
        dAcc = CMAXROBOTV;                // set maximum speed
    dAcc -= vel.rotate(-angBody).getX();             // subtract current velocity

    // acceleration = dash_power * dash_power_rate * effort ->
    // dash_power = acceleration / (dash_power_rate * effort )
    double dDashPower = dAcc/(CDASHPOWERRATE * dEffort );
    if( dDashPower > CMAXPOWER )
        return CMAXPOWER;
    else if( dDashPower < CMINPOWER )
        return CMINPOWER;
    else
        return dDashPower;
}


/*! This method returns the speed that has to be given to an object when
it should have travelled a distance 'dDist' after 'dCycles' number of
cycles. This can be calculated using a geometric series where 'dDecay'
is the used decay factor (default this value equals ball_decay).
\param dDist distance the ball has to travel
\param dCycles nr of cycles after which ball should have travelled 'dDist'
\param dDecay decay of the geometric series.
\return initial speed for the ball to travel 'dDist' in 'dCycles' cycles */
double WorldModel::getFirstSpeedFromDist( double dDist, double dCycles, double
                                         dDecay )
{
    return Geometry::getFirstGeomSeries( dDist, dDecay, dCycles);
}

AngDeg WorldModel::getObjectDirction( ObjectT o )
{
	if(o == O_Ball)
	{
		return 0;
	}
	
	int num  = o - 1;
	if(o > O_Own_5)
	{
		num -= 5;
		return opsRobots[num].getDirection();
	}
	return ownRobots[num].getDirection();
}

Stamina WorldModel::getObjectStamina( ObjectT o )
{
	Stamina sta;
	if( o == O_Ball)
	{
		return sta;
	}
	int num  = o - 1;
	if(o > O_Own_5)
	{
		num -= 5;
		return opsRobots[num].getStamina();
	}
	return ownRobots[num].getStamina();

}

ObjectT WorldModel::getFastestInSetTo( ObjectSetT objectSet, VecPosition *pos, 
									   VecPosition vel, double dDecay, 
									   int *iCycles /* = NULL  */)
{


	setInfT setInf[10];
	getInfbySet(objectSet,setInf);
	struct logInfT{
		VecPosition pos;
		VecPosition vel;
		AngDeg		dir;
		Stamina		sta;
	}logInf[10];
	
	// initial
	for(int i = 0 ; i < 10 ; i++)
	{
		if(setInf[i].availabe)
		{
			logInf[i].pos = getObjectPosition(getObjectbyInf(setInf[i]));
			logInf[i].vel = getObjectVelocity(getObjectbyInf(setInf[i]));
			logInf[i].dir = getObjectDirction(getObjectbyInf(setInf[i]));
			logInf[i].sta = getObjectStamina(getObjectbyInf(setInf[i]));
		}		
	}

	// simulation
	int tempCycles = 0;
	while(tempCycles < *iCycles)
	{
		tempCycles ++;
		if(ball.doMove(pos,&vel,&VecPosition(0,0)) != BS_Normal)
		{
			return O_Unknow;
		}
		for(int i = 0 ; i < 10 ; i++)
		{
			if(!setInf[i].availabe)
			{
				continue;
			}

			if(pos->getDistanceTo(logInf[i].pos) <= CKICKABLEDIST)
			{
				*iCycles = tempCycles;
				return getObjectbyInf(setInf[i]);
			}
			logInf[i].pos = getObjectPosition(getObjectbyInf(setInf[i]));
			logInf[i].vel = getObjectVelocity(getObjectbyInf(setInf[i]));
			logInf[i].dir = getObjectDirction(getObjectbyInf(setInf[i]));
			logInf[i].sta = getObjectStamina(getObjectbyInf(setInf[i]));
			for(int j = 0 ; j < tempCycles ; j ++)
			{
				TCommand tempCommand = predictCommandToMoveToPos(getObjectbyInf(setInf[i]),*pos,tempCycles,&logInf[i].pos,
															     &logInf[i].vel,&logInf[i].dir);
				predictStateAfterCommand(tempCommand,&logInf[i].pos,&logInf[i].vel,&logInf[i].dir,&logInf[i].sta);				
			}
		}		
	}
	return O_Unknow;
}

void WorldModel::getInfbySet( ObjectSetT objectSet, setInfT *setInf )
{
	
//	OBJECT_SET_TEAMMATES,			 /*!< teammates                       */
//  OBJECT_SET_OPPONENTS,			 /*!< opponents                       */
//  OBJECT_SET_PLAYERS,				 /*!< players                         */
//  OBJECT_SET_TEAMMATES_NO_GOALIE,	 /*!< teammates without the goalie    */

	// initial
	for(int i = 0 ; i < 10 ; i ++)
	{
		setInf[i].availabe = false;
	}

	switch(objectSet) {
	case  OBJECT_SET_TEAMMATES:
		for( i = 0 ; i < 5 ; i ++)
		{
			setInf[i].team = 0;
			setInf[i].num  = i;
			setInf[i].availabe = true;
		}
		break;
	case  OBJECT_SET_OPPONENTS:
		for( i = 0 ; i < 5 ; i ++)
		{
			setInf[i].team = 1;
			setInf[i].num  = i;
			setInf[i].availabe = true;
		}
		break;
	case  OBJECT_SET_PLAYERS:
		for( i = 0 ; i < 5 ; i ++)
		{
			setInf[i].team = 0;
			setInf[i].num  = i;
			setInf[i].availabe = true;
		}
		for( i = 5 ; i < 10 ; i ++)
		{
			setInf[i].team = 1;
			setInf[i].num  = i;
			setInf[i].availabe = true;
		}
		break;
	case  OBJECT_SET_TEAMMATES_NO_GOALIE:
		for( i = 0 ; i < 4 ; i ++)
		{
			setInf[i].team = 0;
			setInf[i].num  = i + 1;
			setInf[i].availabe = true;
		}
	}
}


ObjectT WorldModel::getObjectbyInf( setInfT setInf )
{
	if(setInf.team == 0)
	{
		return (ObjectT)(setInf.num + 1);
	}
	else
	{
		return (ObjectT)(setInf.num + 6);
	}
}

VecPosition WorldModel::getObjectPosition( ObjectT o )
{
	if( o == O_Ball)
	{
		return ball.getPosition();
	}
	else if( o < O_Ops_1)
	{
		return ownRobots[o-1].getPosition();
	}
	else
	{
		return opsRobots[o-6].getPosition();
	}
}

VecPosition WorldModel::getObjectVelocity( ObjectT o )
{
	if( o == O_Ball)
	{
		return ball.getVelocity();
	}
	else if( o < O_Ops_1)
	{
		return ownRobots[o-1].getVelocity();
	}
	else
	{
		return opsRobots[o-6].getVelocity();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月激情综合网| 国产成人av影院| 精彩视频一区二区三区| 91一区二区三区在线播放| 日韩一级大片在线观看| 日本一区二区在线不卡| 香蕉久久夜色精品国产使用方法| 国内精品不卡在线| 欧美欧美欧美欧美| 中文字幕一区二区三区四区不卡 | 国产麻豆精品在线| 欧美制服丝袜第一页| 久久久久久麻豆| 三级精品在线观看| 91免费版在线| 久久久午夜精品| 日韩电影在线看| 欧美日韩色一区| 亚洲欧美日韩中文播放| 粉嫩嫩av羞羞动漫久久久| 日韩一区二区三区三四区视频在线观看| 亚洲欧洲99久久| 国产精品18久久久久| 欧美一级久久久| 亚洲gay无套男同| 色综合久久综合网欧美综合网| 欧美经典一区二区| 黄色小说综合网站| www国产亚洲精品久久麻豆| 男人的j进女人的j一区| 在线不卡中文字幕| 香蕉久久夜色精品国产使用方法 | 91丨九色丨尤物| 欧美激情中文字幕一区二区| 久久99国产精品免费网站| 欧美一区二区三区不卡| 午夜精品久久久久久不卡8050| 91亚洲国产成人精品一区二三| 国产日韩成人精品| 成人中文字幕在线| 国产精品日产欧美久久久久| 成人精品免费视频| 中文字幕色av一区二区三区| www.色综合.com| 一区在线观看免费| 色视频欧美一区二区三区| 亚洲乱码国产乱码精品精小说| 91亚洲精华国产精华精华液| 国产精品久久久久久久久久免费看| 国产91精品入口| 综合欧美一区二区三区| 色丁香久综合在线久综合在线观看| 国产精品成人在线观看| 99国产精品久久久久久久久久久| 亚洲色图在线看| 欧美日韩一区二区三区在线| 日韩电影在线看| 久久久五月婷婷| aaa亚洲精品一二三区| 亚洲精品视频在线| 欧美日韩亚洲综合一区| 日本视频一区二区三区| 337p日本欧洲亚洲大胆精品 | 日本aⅴ亚洲精品中文乱码| 欧美成人一区二区三区片免费| 国产成人精品亚洲777人妖| 亚洲卡通欧美制服中文| 欧美一区二区三区免费观看视频| 国产成人精品三级| 亚洲一区二区三区四区在线| 日韩一级免费观看| 国产99精品在线观看| 亚洲综合无码一区二区| 欧美大片在线观看一区| 色综合色狠狠综合色| 蜜臀a∨国产成人精品| 中文字幕亚洲综合久久菠萝蜜| 欧美精品自拍偷拍动漫精品| 国产福利一区二区三区视频 | 国产成人精品亚洲777人妖| 一区二区三区精品| 精品久久五月天| 91视频一区二区三区| 久久成人18免费观看| 亚洲精选一二三| 国产婷婷一区二区| 色婷婷精品久久二区二区蜜臀av| 蜜乳av一区二区三区| 日韩毛片在线免费观看| 精品久久一区二区| 欧美日韩激情一区二区三区| 成人手机电影网| 久久精品99国产精品日本| 亚洲黄色小视频| 国产精品无圣光一区二区| 日韩一区二区三区精品视频| 色久优优欧美色久优优| 懂色av一区二区夜夜嗨| 免费观看一级欧美片| 亚洲无线码一区二区三区| 国产精品的网站| 欧美—级在线免费片| 久久蜜桃av一区精品变态类天堂 | 中文一区一区三区高中清不卡| 欧美一级国产精品| 欧美午夜不卡视频| 91国在线观看| 91社区在线播放| 成人动漫av在线| 成熟亚洲日本毛茸茸凸凹| 国产精品一区二区三区四区 | 蜜桃av噜噜一区二区三区小说| 亚洲欧美日韩在线不卡| 国产精品午夜在线| 国产精品欧美一区喷水| 国产日韩欧美a| 国产色婷婷亚洲99精品小说| 欧美一级日韩一级| 欧美日韩dvd在线观看| 欧美三区免费完整视频在线观看| 色婷婷综合激情| 在线一区二区三区四区| 欧美性猛交xxxxxx富婆| 欧美色老头old∨ideo| 欧美色图12p| 欧美视频你懂的| 在线91免费看| 日韩一二三区视频| 日韩欧美国产综合| 欧美电视剧在线看免费| 久久理论电影网| 中文在线一区二区| 亚洲免费观看高清完整版在线观看熊| 日韩一区欧美一区| 一二三区精品福利视频| 五月激情综合色| 久久精品国产澳门| 成人av综合在线| 色婷婷av一区二区三区之一色屋| 欧美性猛交xxxx乱大交退制版| 欧美福利一区二区| 久久日一线二线三线suv| 欧美激情一区二区三区蜜桃视频| |精品福利一区二区三区| 亚洲午夜免费电影| 美女国产一区二区三区| 成人综合在线观看| 在线成人免费视频| 日本一区二区三区免费乱视频| 亚洲欧美日韩久久| 天堂久久久久va久久久久| 免费成人你懂的| 99久久精品免费观看| 69av一区二区三区| 国产女同互慰高潮91漫画| 一区二区三区四区中文字幕| 日本亚洲三级在线| 成人免费高清视频在线观看| 在线观看免费成人| 国产丝袜欧美中文另类| 亚洲制服欧美中文字幕中文字幕| 久久精品国产在热久久| 91麻豆精品在线观看| 日韩欧美国产三级电影视频| 亚洲欧洲精品一区二区三区不卡| 青青国产91久久久久久| av高清不卡在线| 日韩免费电影网站| 亚洲国产日日夜夜| 99视频超级精品| 欧美xxxxx牲另类人与| 一区二区三区四区视频精品免费| 国产一区二区三区综合| 欧美日韩一级二级| 国产精品入口麻豆九色| 韩国精品免费视频| 337p亚洲精品色噜噜| 亚洲欧美日韩国产手机在线 | 国产乱码一区二区三区| 欧美丝袜自拍制服另类| 中文字幕中文在线不卡住| 蜜臀av一区二区在线免费观看| 在线免费观看日本一区| 中文字幕欧美激情一区| 久久福利视频一区二区| 精品视频一区三区九区| 亚洲欧洲日产国产综合网| 国产精品77777竹菊影视小说| 欧美日韩久久一区| 夜夜嗨av一区二区三区四季av| 国产黄色精品视频| 26uuu亚洲综合色| 蜜桃视频在线一区| 日韩欧美另类在线| 久久99精品国产麻豆婷婷| 51精品秘密在线观看| 亚洲www啪成人一区二区麻豆| 欧洲激情一区二区| 亚洲尤物在线视频观看| 欧美在线观看视频在线|