// Меняем местами положение кубов (в том числе и в массиве целей) void TEnkiEnvironment::swapCubesForColors(double r1, double g1, double b1, double r2, double g2, double b2) { // Находим кубы в массиве объектов ENKI по их цвету, а затем перекрашиваем их std::set<Enki::PhysicalObject *>objects = world->objects; std::set<Enki::PhysicalObject *>::iterator someObject; for (someObject=objects.begin(); someObject!=objects.end(); ++someObject) { Enki::PhysicalObject * actualObject = *someObject; Enki::Color color; color = actualObject->getColor(); if ((color.components[0] == r1) && (color.components[1] == g1) && (color.components[2] == b1)) { color.components[0] = r2; color.components[1] = g2; color.components[2] = b2; actualObject->setColor(color); cout << "found first cube" << std::endl; } else if ((color.components[0] == r2) && (color.components[1] == g2) && (color.components[2] == b2)) { color.components[0] = r1; color.components[1] = g1; color.components[2] = b1; actualObject->setColor(color); cout << "found second cube" << std::endl; } } // Находим кубы в массиве объектов среды (который служит для определения достижения целей) и меняем их в нем местами /*int firstIndexToSwap = 0; int secondIndexToSwap = 0; for (int i=0; i<objectsArray.size(); i++) { TEnkiObject someEnkiObject = objectsArray[i]; if ((someEnkiObject.color[0]/255.0 == r1) && (someEnkiObject.color[1]/255.0 == g1) && (someEnkiObject.color[2]/255.0 == b1)) { firstIndexToSwap = i; } else if ((someEnkiObject.color[0]/255.0 == r2) && (someEnkiObject.color[1]/255.0 == g2) && (someEnkiObject.color[2]/255.0 == b2)) { secondIndexToSwap = i; } } TEnkiObject storedObject = objectsArray.at(firstIndexToSwap); objectsArray.at(firstIndexToSwap) = objectsArray.at(secondIndexToSwap); objectsArray.at(secondIndexToSwap) = storedObject;*/ }
void TEnkiEnvironment::makeGnuplotScriptAndRunIt(std::string graphFilename, double xmin, double xmax, double ymin, double ymax) { // Чтобы замкнуть линии в гнуплоте std::set<Enki::PhysicalObject *>objects = world->objects; std::set<Enki::PhysicalObject *>::iterator someObject; for (someObject=objects.begin(); someObject!=objects.end(); ++someObject) { Enki::PhysicalObject * actualObject = *someObject; if (actualObject != ePuckBot) { ofstream objectsFile; stringstream buf; buf << "C:/enki-log-files/gnuplotObjects" << actualObject->objectNumber << ".txt"; objectsFile.open(buf.str().c_str()); objectsFile << actualObject->pos.x-cubeSize/2.0 << "\t" << actualObject->pos.y-cubeSize/2.0 << std::endl; objectsFile << actualObject->pos.x-cubeSize/2.0 << "\t" << actualObject->pos.y+cubeSize/2.0 << std::endl; objectsFile << actualObject->pos.x+cubeSize/2.0 << "\t" << actualObject->pos.y+cubeSize/2.0 << std::endl; objectsFile << actualObject->pos.x+cubeSize/2.0 << "\t" << actualObject->pos.y-cubeSize/2.0 << std::endl; objectsFile << actualObject->pos.x-cubeSize/2.0 << "\t" << actualObject->pos.y-cubeSize/2.0 << std::endl; objectsFile.close(); } } ofstream gnuplotGraphFile; gnuplotGraphFile.open((graphFilename).c_str()); gnuplotGraphFile << "set terminal pdf size 10cm," << 10*(ymax-ymin)/(xmax-xmin) << "cm font 'Times-New-Roman,5'" << std::endl; gnuplotGraphFile << "set output '" << graphFilename << ".pdf'" << std::endl; gnuplotGraphFile << "set xtics " << static_cast<int>(xmin) <<",50," << static_cast<int>(xmax) << std::endl; gnuplotGraphFile << "set ytics " << static_cast<int>(ymin) <<",50," << static_cast<int>(ymax) << std::endl; gnuplotGraphFile << "set mxtics 5\nset mytics 5" << std::endl; gnuplotGraphFile << "set grid xtics ytics mytics mxtics lt 1 lw 1 linecolor rgb \"gray\"" << std::endl; gnuplotGraphFile << "set palette defined ( 0 \"#660099\", 1 \"#0000CC\", 2 \"#3399FF\", 3 \"#00CC00\", 4 \"#FFFF33\", 5 \"#FF6600\", 6 \"#CC0000\" )" << std::endl; gnuplotGraphFile << "unset colorbox" << std::endl; std::string objectsColorsStrings[10]; for (someObject=objects.begin(); someObject!=objects.end(); ++someObject) { Enki::PhysicalObject * actualObject = *someObject; if (actualObject->objectNumber >= 0) { const Enki::Color objectColor = actualObject->getColor(); std::string rColor = "00"; if (objectColor.components[0] == 1.0) { rColor = "FF"; } std::string gColor = "00"; if (objectColor.components[1] == 1.0) { gColor = "FF"; } std::string bColor = "00"; if (objectColor.components[2] == 1.0) { bColor = "FF"; } objectsColorsStrings[actualObject->objectNumber] = "#" + rColor + gColor + bColor; /*if ((objectColor.components[0] == 1.0) && (objectColor.components[1] == 0.0) && (objectColor.components[2] == 0.0)) { objectsColorsStrings[actualObject->objectNumber] = "red"; } else if ((objectColor.components[0] == 1.0) && (objectColor.components[1] == 1.0) && (objectColor.components[2] == 0.0)) { objectsColorsStrings[actualObject->objectNumber] = "yellow"; } else if ((objectColor.components[0] == 0.0) && (objectColor.components[1] == 1.0) && (objectColor.components[2] == 0.0)) { objectsColorsStrings[actualObject->objectNumber] = "green"; } else if ((objectColor.components[0] == 0.0) && (objectColor.components[1] == 0.0) && (objectColor.components[2] == 1.0)) { objectsColorsStrings[actualObject->objectNumber] = "blue"; }*/ } } gnuplotGraphFile << "plot " << "[" << static_cast<int>(xmin) << ":" << static_cast<int>(xmax) << "] " << "[" << static_cast<int>(ymin) << ":" << static_cast<int>(ymax) << "] " << "'" << gnuplotOutputString << "'" << " u 1:2:(0.2):3 with circles palette notitle, "; for (int i = 0; i < 10; i++) { if (objectsColorsStrings[i].length()) { if (i>=1) { gnuplotGraphFile << ", "; } gnuplotGraphFile << "'C:/enki-log-files/gnuplotObjects" << i << ".txt' with filledcurves notitle linecolor rgb \"" << objectsColorsStrings[i].c_str() << "\""; } else { break; } } gnuplotGraphFile << std::endl; /*<< "'C:/enki-log-files/gnuplotObjects1.txt' with filledcurves notitle linecolor rgb \"" << objectsColorsStrings[0] << "\", " << "'C:/enki-log-files/gnuplotObjects2.txt' with filledcurves notitle linecolor rgb \"" << objectsColorsStrings[1] << "\", " << "'C:/enki-log-files/gnuplotObjects3.txt' with filledcurves notitle linecolor rgb \"" << objectsColorsStrings[2] << "\", " << "'C:/enki-log-files/gnuplotObjects4.txt' with filledcurves notitle linecolor rgb \"" << objectsColorsStrings[3] << "\", " << std::endl;*/ //gnuplotGraphFile << "__EOF" << std::endl; gnuplotGraphFile.close(); //system(("chmod +x "+graphFilename+".sh").c_str()); system(("gnuplot "+graphFilename).c_str()); }