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 );
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); );
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); } }
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; }