void GridClustering::draw_grid(const FieldInfo& fieldInfo)
{
  FIELD_DRAWING_CONTEXT;
  PEN("000000", 20);

  for (int x = 0; x <= fieldInfo.xLength; x+=CountGrid2D::GRID_STEP)
  {
    LINE(x - fieldInfo.xPosOpponentGroundline,
         0 - fieldInfo.yPosLeftSideline,
         x - fieldInfo.xPosOpponentGroundline,
         0 + fieldInfo.yPosLeftSideline);
  }

  for (int y = 0; y <= fieldInfo.yLength; y+=CountGrid2D::GRID_STEP)
  {
    LINE(0 - fieldInfo.xPosOpponentGroundline,
         y - fieldInfo.yPosLeftSideline,
         0 + fieldInfo.xPosOpponentGroundline,
         y - fieldInfo.yPosLeftSideline);
  }


  DEBUG_REQUEST("MCSL:draw_best_cells",
    for (int j = 0; j < CountGrid2D::GRID_X_PRECISION; j++)
    {  
      for (int i = 0; i < CountGrid2D::GRID_Y_PRECISION; i++)
      { 
        if (fieldGrid.table[j][i] > (int)(sampleSet.numberOfParticles*0.03))
        {
          FIELD_DRAWING_CONTEXT;
          //Draw best grid cells
          if (fieldGrid.table[j][i] >= (int)(sampleSet.numberOfParticles*0.09))
          {
            PEN("FF0000", 20);
          }
          else if (fieldGrid.table[j][i] > (int)(sampleSet.numberOfParticles*0.06))
          {
            PEN("FF5555", 20);
          }
          else if (fieldGrid.table[j][i] > (int)(sampleSet.numberOfParticles*0.03))
          {
            PEN("FFAAAA", 20);
          }

          CIRCLE(j*CountGrid2D::GRID_STEP-fieldInfo.xPosOpponentGroundline + CountGrid2D::GRID_STEP/2,
                 i*CountGrid2D::GRID_STEP-fieldInfo.yPosLeftSideline  + CountGrid2D::GRID_STEP/2,
                 CountGrid2D::GRID_STEP/2);
        }//end if
      }//end for
    }//end for
   );
Exemple #2
0
VOID DrawRound(HDC hdc)
{

	
		PEN(hdc, Width, R, G, B);
	
	if (enTrainDessin == TRUE)
	{
		MoveToEx(hdc, p1.x, p1.y, NULL);
		saveL = min(p1.x, p2.x);

		saveT = min(p1.y, p2.y);

		saveR = min(p1.x, p2.x);

		saveB = min(p1.y, p2.y);
		int leng = min(abs(p2.x - p1.x), abs(p2.y - p1.y));
		if (p2.x < p1.x)
			p1.x = saveR - leng;
		else
			p2.x = saveL + leng;

		if (p2.y < p1.y)
			p1.y = saveB - leng;
		else
			p2.y = saveT + leng;
		//MoveToEx(hdc, p1.x, p1.y, NULL);
		Ellipse(hdc, p1.x, p1.y, p2.x, p2.y);
	}
}
void DummyActiveGoalLocator::execute() 
{
  // reset
  getLocalGoalModel().opponentGoalIsValid = false;
  getLocalGoalModel().ownGoalIsValid = false;

  getLocalGoalModel().someGoalWasSeen = getGoalPercept().getNumberOfSeenPosts() > 0; //getSensingGoalModel().someGoalWasSeen;
  
  // opp goal is in front of me
  const GoalModel::Goal& oppGoal = getSelfLocGoalModel().getOppGoal(getCompassDirection(), getFieldInfo());
  if(((oppGoal.leftPost+oppGoal.leftPost)*0.5).x > 0)
    getLocalGoalModel().opponentGoalIsValid = true;
  else
    getLocalGoalModel().ownGoalIsValid = true;


  // copy the self loc goal
  getLocalGoalModel().goal = getSelfLocGoalModel().goal;
  
  //frame Info when goal was seen not useful! New: some_goal_was seen
  if(getGoalPercept().getNumberOfSeenPosts() > 0)
  {
    getLocalGoalModel().goal.frameInfoWhenGoalLastSeen = getFrameInfo();

    if(getLocalGoalModel().opponentGoalIsValid)
    {
      getLocalGoalModel().frameWhenOpponentGoalWasSeen = getFrameInfo();
    }
    else
    {
      getLocalGoalModel().frameWhenOwnGoalWasSeen = getFrameInfo();
    }
  }

  DEBUG_REQUEST("DummyActiveGoalLocator:draw_goal_model",
    FIELD_DRAWING_CONTEXT;
    if(getLocalGoalModel().opponentGoalIsValid)
      PEN("000000", 50);
    else
      PEN("FFFFFF", 50);

    CIRCLE(getLocalGoalModel().goal.leftPost.x, getLocalGoalModel().goal.leftPost.y, 50);
    CIRCLE(getLocalGoalModel().goal.rightPost.x, getLocalGoalModel().goal.rightPost.y, 50);
    LINE(getLocalGoalModel().goal.rightPost.x, getLocalGoalModel().goal.rightPost.y, getLocalGoalModel().goal.leftPost.x, getLocalGoalModel().goal.leftPost.y);
  );
Exemple #4
0
VOID DrawEllipse(HDC hdc)
{
	
		PEN(hdc, Width, R, G, B);
	
	if (enTrainDessin == TRUE)
	{
		//MoveToEx(hdc, p1.x, p1.y, NULL);
		Ellipse(hdc, p1.x, p1.y,p2.x,p2.y);
	}
}
Exemple #5
0
VOID FreeDraw(HDC hdc)
{
	
		PEN(hdc, Width, R, G, B);
	
	if (enTrainDessin == TRUE)
	{
		MoveToEx(hdc, p1.x, p1.y, NULL);
		LineTo(hdc, p2.x, p2.y);
		p1 = p2;
	}
}
double GuptaPotentialEnergy::EnergyValue(Clusters& cluster)
{
	int N = cluster.GetAtomsNumber();
	_atomEnergy.resize(N);
	double *dis = cluster.GetDistancePointer();
	double E = 0;
	vector<double> VEN(N,0);
	vector<double> PEN(N,0);
	
	Alloy alloy = cluster.GetAlloy();

	for (int i = 0; i < N - 1; i ++)
	{
		for (int j = i + 1; j < N; j ++)
		{
			double r = dis[ i * N + j ];
			int note1 = cluster.GetAtomAtIndex(i).GetNote();
			int note2 = cluster.GetAtomAtIndex(j).GetNote();
			Gupta_AtomParamter parameter = (Gupta_AtomParamter&)ReturnAtomParameter(alloy[note1],alloy[note2]);
			double FMJN = r / parameter.r0 - 1;
			double FMJV = parameter.A * exp( -parameter.P * FMJN );
			double FMJP  = parameter.Xi * parameter.Xi * exp( -2 * parameter.q *FMJN );

			VEN[i] += FMJV;
			VEN[j] += FMJV;
			PEN[i] += FMJP;
			PEN[j] += FMJP;
		}
	}
	for (int i = 0; i < N; i++)
	{		
		_atomEnergy[i] = VEN[i] - sqrt(PEN[i]);
		E += _atomEnergy[i];
	}

	cluster.SetEnergyVectorOfAtoms(_atomEnergy);
	cluster.SetEnergy(E);

	return E;
}
double GuptaPotentialEnergy::ForceValue(Clusters& cluster)
{
	int N = cluster.GetAtomsNumber();
	double *dis = cluster.GetDistancePointer();
	vector<double> PEN(N,0);
	Alloy alloy = cluster.GetAlloy();

	for (int i = 0; i < N - 1; i ++)
	{
		for (int j = i + 1; j < N; j ++)
		{
			double r = dis[ i * N + j ];
			int note1 = cluster.GetAtomAtIndex(i).GetNote();
			int note2 = cluster.GetAtomAtIndex(j).GetNote();
			Gupta_AtomParamter parameter = (Gupta_AtomParamter&)ReturnAtomParameter(alloy[note1],alloy[note2]);
			double FMJN = r / parameter.r0 - 1;
			double FMJP  = parameter.Xi * parameter.Xi * exp( -2 * parameter.q *FMJN );

			PEN[i] += FMJP;
			PEN[j] += FMJP;
		}
	}

	for (int i = 0; i < N; i++)
		PEN[i] = 1/sqrt(PEN[i])/2;

	_atomForceAlongX.resize(N);
	_atomForceAlongY.resize(N);
	_atomForceAlongZ.resize(N);
	_atomForceAlongX.assign(N,0);
	_atomForceAlongY.assign(N,0);
	_atomForceAlongZ.assign(N,0);

	for (int i = 0; i < N-1; i++)
	{
		for (int j = i + 1; j < N; j++)
		{
			double r = dis[ i * N + j ];
			int note1 = cluster.GetAtomAtIndex(i).GetNote();
			int note2 = cluster.GetAtomAtIndex(j).GetNote();
			Gupta_AtomParamter parameter = (Gupta_AtomParamter&)ReturnAtomParameter(alloy[note1],alloy[note2]);
			double FMJN = r / parameter.r0 - 1;

			double dFMJV = - parameter.P / parameter.r0 * parameter.A * exp( -parameter.P * FMJN ) * 2;
			double dFMJP = -2 * parameter.q / parameter.r0 * parameter.Xi * parameter.Xi * exp( -2 * parameter.q *FMJN );
			double FK = dFMJV - (PEN[i] + PEN[j]) * dFMJP;

			Atom atomOfI = cluster.GetAtomAtIndex(i);
			AtomPos posOfAtomAtI = atomOfI.GetPos();
			Atom atomOfJ = cluster.GetAtomAtIndex(j);
			AtomPos posOfAtomAtJ = atomOfJ.GetPos();
			_atomForceAlongX[i] = _atomForceAlongX[i]+FK*(posOfAtomAtI.x-posOfAtomAtJ.x)/r;
			_atomForceAlongX[j] = _atomForceAlongX[j]-FK*(posOfAtomAtI.x-posOfAtomAtJ.x)/r;
			_atomForceAlongY[i] = _atomForceAlongY[i]+FK*(posOfAtomAtI.y-posOfAtomAtJ.y)/r;
			_atomForceAlongY[j] = _atomForceAlongY[j]-FK*(posOfAtomAtI.y-posOfAtomAtJ.y)/r;
			_atomForceAlongZ[i] = _atomForceAlongZ[i]+FK*(posOfAtomAtI.z-posOfAtomAtJ.z)/r;
			_atomForceAlongZ[j] = _atomForceAlongZ[j]-FK*(posOfAtomAtI.z-posOfAtomAtJ.z)/r;
		}
	}

	cluster.SetForceXYZVectorOfAtoms(_atomForceAlongX,_atomForceAlongY,_atomForceAlongZ);

	double forceXOfCluster = 0, forceYOfCluster = 0, forceZOfCluster = 0;
	for (int i = 0; i < N; i++)
	{
		forceXOfCluster += _atomForceAlongX[i] * _atomForceAlongX[i];
		forceYOfCluster += _atomForceAlongY[i] * _atomForceAlongY[i];
		forceZOfCluster += _atomForceAlongZ[i] * _atomForceAlongZ[i];
	}

	double F = sqrt(forceXOfCluster  + forceYOfCluster  + forceZOfCluster );
	cluster.SetForceOfCluster(F);

	return F;
}