📄 generatedata.cpp
字号:
// GenerateData.cpp: implementation of the CGenerateData class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "math.h"
#include "Strategy.h"
#include "GenerateData.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGenerateData::CGenerateData(Environment *envPointer, UserDefStruct *UserDataPointer)
{
UserData = UserDataPointer;
env = envPointer;
}
CGenerateData::~CGenerateData()
{
}
double CGenerateData::CalculatePointToPointDistance(Vector3D StartPoint, Vector3D EndPoint)
{
double dy, dx, Distance;
dy = StartPoint.y - EndPoint.y;
dx = StartPoint.x - EndPoint.x;
Distance = sqrt( (dy * dy) + (dx * dx) );
return Distance;
}
double CGenerateData::CalculatePointToPointAngleDegree(Vector3D StartPoint, Vector3D EndPoint)
{
double dy, dx, Angle;
dy = StartPoint.y - EndPoint.y;
dx = StartPoint.x - EndPoint.x;
Angle = ( atan2(dy, dx) ) * ( 180.0 / PI ) ;
return Angle;
}
double CGenerateData::CalculatePointToPointAngleRadian(Vector3D StartPoint, Vector3D EndPoint)
{
double dy, dx, Angle;
dy = StartPoint.y - EndPoint.y;
dx = StartPoint.x - EndPoint.x;
Angle = ( atan2(dy, dx) );
return Angle;
}
void CGenerateData::GenerateGoalPoint(Vector3D HomeGoalPoint[GoalPointAccuracy], Vector3D OpponentGoalPoint[GoalPointAccuracy])
{
double GoalBottom = GBOTY;
double GoalTop = GTOPY;
for(int i=0;i<GoalPointAccuracy;i++)
{
HomeGoalPoint[i].x = FLEFTX;
HomeGoalPoint[i].y = (((GoalTop - GoalBottom) / (GoalPointAccuracy)) * i) + GoalBottom;
HomeGoalPoint[i].z = 0;
HomeGoalPoint[i].x = FRIGHTX;
OpponentGoalPoint[i].y = (((GoalTop - GoalBottom) / (GoalPointAccuracy)) * i) + GoalBottom;
HomeGoalPoint[i].z = 0;
}
return;
}
GeneratedDataSetParentStruct CGenerateData::CalculateAllData()
{
int i, j;
GeneratedDataSetParentStruct DistanceAngleData;
Vector3D HomeGoalPoint[GoalPointAccuracy];
Vector3D OpponentGoalPoint[GoalPointAccuracy];
GenerateGoalPoint(HomeGoalPoint, OpponentGoalPoint);
//Data Between Home And Opponent Robot
for(i=0;i<PLAYERS_PER_SIDE;i++)
{
for(j=0;j<PLAYERS_PER_SIDE;j++)
{
DistanceAngleData.Home[i].ToOpponent[j].Distance = CalculatePointToPointDistance(UserData->HomeRobotData[i].Position, UserData->OpponentRobotData[j].Position);
DistanceAngleData.Opponent[i].ToHome[j].Distance = CalculatePointToPointDistance(UserData->OpponentRobotData[j].Position, UserData->HomeRobotData[i].Position);
DistanceAngleData.Home[i].ToOpponent[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->HomeRobotData[i].Position, UserData->OpponentRobotData[j].Position);
DistanceAngleData.Opponent[i].ToHome[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->OpponentRobotData[j].Position, UserData->HomeRobotData[i].Position);
DistanceAngleData.Home[i].ToOpponent[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->HomeRobotData[i].Position, UserData->OpponentRobotData[j].Position);
DistanceAngleData.Opponent[i].ToHome[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->OpponentRobotData[j].Position, UserData->HomeRobotData[i].Position);
}
}
for(i=0;i<PLAYERS_PER_SIDE;i++)
{
for(j=0;j<GoalPointAccuracy;j++)
{
DistanceAngleData.Home[i].ToHomeGoalPoint[j].Distance = CalculatePointToPointDistance(UserData->HomeRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Home[i].ToOpponentGoalPoint[j].Distance = CalculatePointToPointDistance(UserData->HomeRobotData[i].Position, OpponentGoalPoint[j]);
DistanceAngleData.Opponent[i].ToHomeGoalPoint[j].Distance = CalculatePointToPointDistance(UserData->OpponentRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Opponent[i].ToOpponentGoalPoint[j].Distance = CalculatePointToPointDistance(UserData->OpponentRobotData[i].Position, OpponentGoalPoint[j]);
DistanceAngleData.Home[i].ToHomeGoalPoint[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->HomeRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Home[i].ToOpponentGoalPoint[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->HomeRobotData[i].Position, OpponentGoalPoint[j]);
DistanceAngleData.Opponent[i].ToHomeGoalPoint[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->OpponentRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Opponent[i].ToOpponentGoalPoint[j].Angle.Degree = CalculatePointToPointAngleDegree(UserData->OpponentRobotData[i].Position, OpponentGoalPoint[j]);
DistanceAngleData.Home[i].ToHomeGoalPoint[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->HomeRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Home[i].ToOpponentGoalPoint[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->HomeRobotData[i].Position, OpponentGoalPoint[j]);
DistanceAngleData.Opponent[i].ToHomeGoalPoint[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->OpponentRobotData[i].Position, HomeGoalPoint[j]);
DistanceAngleData.Opponent[i].ToOpponentGoalPoint[j].Angle.Radian = CalculatePointToPointAngleRadian(UserData->OpponentRobotData[i].Position, OpponentGoalPoint[j]);
}
}
return DistanceAngleData;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -