📄 intercept.cpp
字号:
if (interceptGTBVector.getMagnitude() < 8) { if (fabs(deltaAngleToBallAngle) < 90) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.5; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * .2; else if (fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * .4; } else { if (fabs(deltaAngleToBallAngle) < 90) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.5; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.5; else if(fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.5; } } else { extraKickableForAngleNoise = 0; extraKickableForNoise /= 2.00; } /////////////////////NEGATIVE ANGLE NOISE if (waitBall.getBodyVec().getMagnitude() <= (bodyKickableArea + extraKickableForNoise + extraKickableForAngleNoise)) { gtbPoint[gtbPointsNumber] = Point(waitBody.getPos().getX(), waitBody.getPos().getY()); extraGTBTime[gtbPointsNumber] = i; mainGtbTime[gtbPointsNumber] = mainGoToBallTime + extraGTBTime[gtbPointsNumber]; gtbStatus[gtbPointsNumber] = 2; gtbTime[gtbPointsNumber] = mainGoToBallTime + (extraGTBTime[gtbPointsNumber] / 2.00);// gtbTime[gtbPointsNumber] -= 2; minBallDistance[gtbPointsNumber] = waitBall.getBodyVec().getMagnitude();/*TOF2*/ gtbPointWeight[gtbPointsNumber] += min((bodyKickableArea - minBallDistance[gtbPointsNumber]) , (float).3) * 10; distToBegin[gtbPointsNumber] = hypot(waitBall.getPos().getX() - worldModel->getBall().getPos().getX(), waitBall.getPos().getY() - worldModel->getBall().getPos().getY()); delete gtbCommand[gtbPointsNumber]; gtbCommand[gtbPointsNumber] = new DashCommand(AT_INTERCEPT, mainNegativeDashPower); catchedBall = 1; gtbPointsNumber++; } waitBody.simulateByDynamics(); waitBall.simulateByDynamics(waitBody); } if (catchedBall) catchedBallCycles++; }// LOG << "MeisamGoToBall : gtbPointsNumberT! : " << gtbPointsNumber << endl;///////////////OneTurnPositiveDash Body virtualDashBody; virtualDashBody = simBody; virtualDashBody.setVel().setAsCartesian(0,0); Vector goToBallVector; float deltaAngleToGTB; float gtbRadius = bodyKickableArea;// LogMaker.Log("GTBRadius 1 : ", GTBRadius); simBody = worldModel->getBody(); simBall = worldModel->getBall(); catchedBallCycles = 0; catchedBall = 0; mainGoToBallTime = 0; extraKickableForNoise = -.045 * mainGoToBallTime; simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToGTB = simBody.getBodyDir() - goToBallVector.getDirection(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB);// LogMaker.Log("DeltaAngleToGTB 1 : ", DeltaAngleToGTB); mainGoToBallTime++;//KOMAK virtualDashBody.setStamina(virtualDashBody.setStamina() + virtualDashBody.getStaminaIncMax() * 1);/*One Turn*/; dashPower = 100; if (virtualDashBody.getStamina() < 1400) dashPower = virtualDashBody.getStaminaIncMax(); tempDashCommand.setPower(dashPower); while (mainGoToBallTime < MAX_GTB_CHECKED_TIME && gtbPointsNumber < 30) { mainGoToBallTime++;//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() + virtualDashBody.getStaminaIncMax() * 1);/*One Turn*/; dashPower = 100; if (virtualDashBody.getStamina() < 1400) dashPower = virtualDashBody.getStaminaIncMax(); tempDashCommand.setPower(dashPower); virtualDashBody.simulateByAction(&tempDashCommand);//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() - dashPower); gtbRadius += virtualDashBody.getVel().getMagnitude(); extraKickableForNoise = - .045 * mainGoToBallTime; extraKickableForNoise -= .45; simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToGTB = goToBallVector.getDirection() - simBody.getBodyDir(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB); float deltaAngleToBallAngle; Vector gtbVector; gtbVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToBallAngle = gtbVector.getDirection() - simBall.getVel().getDirection(); deltaAngleToBallAngle = normalizeAngle(deltaAngleToBallAngle); if (goToBallVector.getMagnitude() < 10) { if (fabs(deltaAngleToBallAngle) < 90)// extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; extraKickableForAngleNoise = 0; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; else if (fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; } else { if (fabs(deltaAngleToBallAngle) < 90)// extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; extraKickableForAngleNoise = 0; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.8; else if (fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.8; } if ((gtbRadius + extraKickableForNoise + extraKickableForAngleNoise) >= goToBallVector.getMagnitude() && fabs(deltaAngleToGTB) <= BasicTurn::getTurnAngle(179,worldModel->getBody())) { gtbPoint[gtbPointsNumber] = Point(simBody.getPos().getX(), simBody.getPos().getY()); gtbTime[gtbPointsNumber] = mainGoToBallTime; extraGTBTime[gtbPointsNumber] = 0; mainGtbTime[gtbPointsNumber] = mainGoToBallTime + extraGTBTime[gtbPointsNumber]; gtbStatus[gtbPointsNumber] = 3; minBallDistance[gtbPointsNumber] = goToBallVector.getMagnitude() - gtbRadius + bodyKickableArea; distToBegin[gtbPointsNumber] = hypot(simBall.getPos().getX() - worldModel->getBall().getPos().getX(), simBall.getPos().getY() - worldModel->getBall().getPos().getY()); delete gtbCommand[gtbPointsNumber]; gtbCommand[gtbPointsNumber] = TurnAngle(AT_INTERCEPT, deltaAngleToGTB, worldModel->getBody()).getCommand();/*TOF*/ if (fabs(deltaAngleToGTB) <= 8){ delete gtbCommand[gtbPointsNumber]; /*TOF*/ gtbCommand[gtbPointsNumber] = new DashCommand(AT_INTERCEPT, mainPositiveDashPower);} gtbPointsNumber++; } } // LOG << "MeisamGoToBall : gtbPointsNumber 2 : " << gtbPointsNumber << endl;///////////////OneTurnNegativeDash /* virtualDashBody = simBody; virtualDashBody.setVel().setAsCartesian(0,0); gtbRadius = bodyKickableArea; simBody = worldModel->getBody(); simBall = worldModel->getBall(); catchedBallCycles = 0; catchedBall = 0; mainGoToBallTime = 0; extraKickableForNoise = .06 * mainGoToBallTime; simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToGTB = simBody.getBodyDir() - goToBallVector.getDirection(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB); mainGoToBallTime++;//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() + virtualDashBody.getStaminaIncMax() * 1); dashPower = -100; if (virtualDashBody.getStamina() < 1400) dashPower = -virtualDashBody.getStaminaIncMax() / 2.00; tempDashCommand.setPower(dashPower); while (mainGoToBallTime < MAX_GTB_CHECKED_TIME && gtbPointsNumber < 50) { mainGoToBallTime++;//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() + virtualDashBody.getStaminaIncMax() * 1); dashPower = -100; if (virtualDashBody.getStamina() < 1400) dashPower = -virtualDashBody.getStaminaIncMax() / 2.00; tempDashCommand = DashCommand(dashPower); virtualDashBody.simulateByAction(&dashCommand);//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() + DashPower * 2); gtbRadius += virtualDashBody.getVel().getMagnitude(); extraKickableForNoise = .06 * mainGoToBallTime; simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); goToBallVector.setAsPolar(goToBallVector.getMagnitude(), normalizeAngle(goToBallVector.getDirection() + 180)); deltaAngleToGTB = goToBallVector.getMagnitude() - simBody.getBodyDir(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB);//KOMAK if((gtbRadius + extraKickableForNoise) >= goToBallVector.getMagnitude() && fabs(deltaAngleToGTB) <= calculate.Public.GetVirtualTurnAngle(179)) { gtbPoint[gtbPointsNumber] = Point(simBody.getPos().getX(), simBody.getPos().getY()); gtbTime[gtbPointsNumber] = mainGoToBallTime; extraGTBTime[gtbPointsNumber] = 0; minBallDistance[gtbPointsNumber] = goToBallVector.getMagnitude() - gtbRadius + bodyKickableArea; distToBegin[gtbPointsNumber] = hypot(simBall.getPos().getX() - worldModel->getBall().getPos().getX(), simBall.getPos().getY() - worldModel->getBall().getPos().getY()); gtbCommand[gtbPointsNumber] = *TurnAngle(deltaAngleToGTB, worldModel->getBody()); gtbPointsNumber++; } }*/// LOG << "MeisamGoToBall : gtbPointsNumber 3 : " << gtbPointsNumber << endl;///////////////TwoTurnPositiveDash virtualDashBody = simBody; virtualDashBody.setVel().setAsCartesian(0,0); gtbRadius = bodyKickableArea; simBody = worldModel->getBody(); simBall = worldModel->getBall(); catchedBallCycles = 0; catchedBall = 0; mainGoToBallTime = 0; extraKickableForNoise = - .045 * mainGoToBallTime; for (int i = 0; i < 2; i++) { simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToGTB = simBody.getBodyDir() - goToBallVector.getDirection(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB); mainGoToBallTime++;//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() + virtualDashBody.getStaminaIncMax()); } dashPower = 100; if (virtualDashBody.getStamina() < 1400) dashPower = virtualDashBody.getStaminaIncMax(); tempDashCommand.setPower(dashPower); while (mainGoToBallTime < MAX_GTB_CHECKED_TIME && gtbPointsNumber < 70) { mainGoToBallTime++;// virtualDashBody.setStamina()(virtualDashBody.getStamina() + virtualDashBody.getStaminaIncMax()); dashPower = 100; if (virtualDashBody.getStamina() < 1400) dashPower = virtualDashBody.getStaminaIncMax(); tempDashCommand.setPower(dashPower); virtualDashBody.simulateByAction(dynamic_cast <Command *> (&tempDashCommand));//KOMAK virtualDashBody.setStamina(virtualDashBody.getStamina() - dashPower); gtbRadius += virtualDashBody.getVel().getMagnitude(); extraKickableForNoise = -.045 * mainGoToBallTime; extraKickableForNoise -= .45; simBody.simulateByDynamics(); simBall.simulateByDynamics(simBody); goToBallVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToGTB = goToBallVector.getDirection() - simBody.getBodyDir(); deltaAngleToGTB = normalizeAngle(deltaAngleToGTB); float deltaAngleToBallAngle; Vector gtbVector; gtbVector.setByPoints(Point(simBody.getPos().getX(), simBody.getPos().getY()), Point(simBall.getPos().getX(), simBall.getPos().getY())); deltaAngleToBallAngle = gtbVector.getDirection() - simBall.getVel().getDirection(); deltaAngleToBallAngle = normalizeAngle(deltaAngleToBallAngle); if (goToBallVector.getMagnitude() < 10) { if (fabs(deltaAngleToBallAngle) < 90)// extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; extraKickableForAngleNoise = 0; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; else if (fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; } else { if (fabs(deltaAngleToBallAngle) < 90)// extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1; extraKickableForAngleNoise = 0; else if (fabs(deltaAngleToBallAngle) < 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.8; else if (fabs(deltaAngleToBallAngle) >= 120) extraKickableForAngleNoise = (Degree::cos(fabs(deltaAngleToBallAngle)) + 0) * 1.8; } if ((gtbRadius + extraKickableForNoise + extraKickableForAngleNoise) >= goToBallVector.getMagnitude())// && fabs(deltaAngleToGTB) <= Calculate.Public.GetVirtualTurnAngle(180)) { gtbPoint[gtbPointsNumber] = Point(simBody.getPos().getX(), simBody.getPos().getY()); gtbTime[gtbPointsNumber] = mainGoToBallTime; extraGTBTime[gtbPointsNumber] = 0; mainGtbTime[gtbPointsNumber] = mainGoToBallTime + extraGTBTime[gtbPointsNumber]; gtbStatus[gtbPointsNumber] = 4; minBallDistance[gtbPointsNumber] = goToBallVector.getMagnitude() - gtbRadius + bodyKickableArea; distToBegin[gtbPointsNumber] = hypot(simBall.getPos().getX() - worldModel->getBall().getPos().getX(), simBall.getPos().getY() - worldModel->getBall().getPos().getY()); delete gtbCommand[gtbPointsNumber]; gtbCommand[gtbPointsNumber] = TurnAngle(AT_INTERCEPT, deltaAngleToGTB, worldModel->getBody()).getCommand();/*TOF*/ if (fabs(deltaAngleToGTB) <= 8){ delete gtbCommand[gtbPointsNumber];/*TOF*/ gtbCommand[gtbPointsNumber] = new DashCommand(AT_INTERCEPT, mainPositiveDashPower);} gtbPointsNumber++; } }// LOG << "MeisamGoToBall : gtbPointsNumber 4 : " << gtbPointsNumber << endl; for (int i = 0; i < gtbPointsNumber; i++) { gtbPointWeight[i] -= gtbTime[i]; if (gtbStatus[i] == 0) if (worldModel->getCurInterCalculate().existFastestOppPlayer()) { float bestOppTime = worldModel->getCurInterCalculate(). getFastestOppInterPlayer().getInterTime(); if (bestOppTime < mainGtbTime[i]); gtbPointWeight[i] -= (mainGtbTime[i] - bestOppTime) * 5; } if (gtbStatus[i] == 1) if (library.lastBodyCycleCommand->getCreator() == AT_DRIBBLE || library.lastBodyCycleCommand->getCreator() == AT_SRPDRIBBLE || library.lastBodyCycleCommand->getCreator() == AT_DRIBBLE_INTERCEPT) gtbPointWeight[i] -= 10000;// gtbPointWeight[i] += extraGTBTime[i]; } bestGTBPointNumber = 0; for (int i = 0; i < gtbPointsNumber; i++) {// LOG << "i , gtbTime[i] : " << i << " " << gtbTime[i] << endl;// LOG << "i , gtbWeightPoint[i] : " << i << " " << gtbPointWeight[i] << endl;// LOG << "i , extraGTBTime[i] : " << i << " " << extraGTBTime[i] << endl;// LOG << "i , minBallDistance[i] : " << i << " " << minBallDistance[i] << endl; if (gtbPointWeight[i] > gtbPointWeight[bestGTBPointNumber]) bestGTBPointNumber = i; } // LOG << "BestGTBCommand : " << gtbCommand[bestGTBPointNumber]->toString() << endl; // LOG << "BestGTBPointNumber : " << bestGTBPointNumber << endl; return AD_NORMAL_VALUE;}void Intercept::execute(Form &form, const Library &library){ LOG << "Intercept::execute" << endl; command = gtbCommand[bestGTBPointNumber];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -