?? worldmodel.h
字號:
#ifndef WORLDMODEL_H
#define WORLDMODEL_H
#include "Ball.h"
#include "Robot.h"
class WorldModel
{
public:
Ball ball;
Robot ownRobots[5];
Robot opsRobots[5];
public:
// ***********************************************************
// -------------------------predict---------------------------
// ***********************************************************
// 預(yù)測物體o在經(jīng)過dCycles后的狀態(tài)。
// 如果是球,只考慮速度衰減。如果是人,便始終使用iDashPower的加速力量。
// bUpdate表示是否希望對posIn和velIn的值進行更新。
// 當(dāng)然前提條件是函數(shù)使用時傳入posIn和velIn。
// 函數(shù)最后返回預(yù)測后的地點值(等同于更新后的posIn)。
VecPosition predictPosAfterNrCycles ( ObjectT o,
double dCycles,
int iDashPower,
VecPosition *posIn,
VecPosition *velIn,
bool bUpdate = true );
// 預(yù)測球員在執(zhí)行Dash(加速)命令后的狀態(tài)。
// 其中dActualPower、dDirection為別是加速的力量和方向參數(shù)。
// pos,vel,sta需傳入之前的位置、速度、體力,預(yù)測后會更新它們。
// 注意:ObjectT需要傳入預(yù)測球員的類型,這在異構(gòu)球員的情況下會有用。
void predictStateAfterDash ( double dActualPower,
VecPosition *pos,
VecPosition *vel,
Stamina *sta,
double dDirection );
// 預(yù)測球員在執(zhí)行Turn(轉(zhuǎn)頭)命令后的狀態(tài)。
// 其中dSendAngle為Turn命令的轉(zhuǎn)角參數(shù)。
// pos,vel,angBody,angNeck需傳入之前的位置、速度、身體和頭部方向,預(yù)測后更新。
// 注意:ObjectT需要傳入預(yù)測球員的類型,這在異構(gòu)球員的情況下會有用。
void predictStateAfterTurn ( AngDeg dSendAngle,
VecPosition *pos,
VecPosition *vel,
AngDeg *angBody,
Stamina *sta );
AngDeg getActualTurnAngle ( AngDeg angActualAngle,
double dSpeed );
// 返回在效用dEffort的作用下,經(jīng)iCycles周期,
// 達到期望位置posRelTo(相對球員坐標(biāo))所需的DashPower。
// 其中angbody和vel分別為球員的身體朝向和速度。
// 返回速度dSpeed的影響下的轉(zhuǎn)角angActualAngle的實際轉(zhuǎn)角。
double getPowerForDash ( VecPosition posRelTo,
AngDeg angBody,
VecPosition vel,
double dEffort,
int iCycles = 1 );
// 返回達到期望(經(jīng)dCycles周期移動dDist)所需的初始速度。
// 其中dDecay為速度的衰減率。
double getFirstSpeedFromDist ( double dDist,
double dCycles,
double dDecay );
AngDeg getObjectDirction ( ObjectT o );
Stamina getObjectStamina ( ObjectT o );
VecPosition getObjectPosition ( ObjectT o );
VecPosition getObjectVelocity ( ObjectT o );
// 根據(jù)球員obj到posTo的位置等關(guān)系,判斷需要轉(zhuǎn)身的次數(shù)。
// 通過考慮轉(zhuǎn)身正面接球,轉(zhuǎn)身背面接球的效率,來決定一系列的com,
// 并返回第一個com指令。
// 其中iCycles為到posTo的可用周期數(shù),dDistBack為最大允許倒退距離,
// bMoveBack為是否允許倒退的開關(guān)。
// 注意:
// 1、該函數(shù)里面包含了許多主觀經(jīng)驗成分,暫時無法驗證其可靠性。
// 2、在函數(shù)中發(fā)現(xiàn)疑似誤碼:
/* if( pos.getDistanceTo(posTo) > 30.0 )
dRatioTurn = 4.0; //這段代碼沒用?。。?
是否應(yīng)該將下句代碼的if改為else if???
*/
TCommand predictCommandTurnTowards ( ObjectT o,
VecPosition posTo,
int iCycles,
double dDistBack,
bool bMoveBack,
VecPosition *pos,
VecPosition *vel,
AngDeg *angBody );
TCommand predictCommandToMoveToPos ( ObjectT o,
VecPosition posTo,
int iCycles,
VecPosition *pos,
VecPosition *vel,
AngDeg *angBody,
double dDistBack = 2.5,
bool bMoveBack = false);
// 預(yù)測球員在用dPower執(zhí)行Dash命令后的體力值sta。
// 由于每周期都可以得到Stamina的準(zhǔn)確值,所以這個函數(shù)用處不是很大。
void predictStaminaAfterDash ( double dPower,
Stamina *sta );
// 預(yù)測球員執(zhí)行命令后的狀態(tài)
void predictStateAfterCommand ( TCommand com,
VecPosition *pos,
VecPosition *vel,
AngDeg *dDirection,
Stamina *sta = NULL );
void makeCommand ( TCommand *com,
CommandTypeT comType,
double comP0,
double comP1 );
// 返回Turn命令中的Angle,考慮到速度dSpeed的影響,
// 其中angDesiredAngle為期望轉(zhuǎn)角。
AngDeg getAngleForTurn ( AngDeg angDesiredAngle,
double dSpeed );
// 返回屬于ObjectSetT的object,且到以vel速度dDecay速率衰減從pos點移動的物體。
// iCycles將返回與該物體相遇需要的周期數(shù)。
ObjectT getFastestInSetTo ( ObjectSetT objectSet,
VecPosition *pos,
VecPosition vel,
double dDecay,
int *iCycles = NULL );
void getInfbySet ( ObjectSetT objectSet,
setInfT *setInf );
ObjectT getObjectbyInf ( setInfT setInf );
};
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -