// space.cc - Classe Space // robert - Programme du robot APBteam // Copyright (C) 2005 Olivier Gaillard /// @file space.cc Etalonnage des distances et localisation de la balle #include #include #include "space.hh" #include "group.hh" /// Constructeur /// @param imgHeight hauteur de l'image /// @param imgWidth largeur de l'image Space::Space (const int imgWidth, const int imgHeight) : imgHeight_ (imgHeight), imgWidth_ (imgWidth), tabX_ (0), tabY_ (0) { oconfig_ = OConfig::getInstance (); } /// Destructeur Space::~Space () { delete [] tabX_; delete [] tabY_; } /// Cree un fichier gnuplot avec la courbe des points donnés par la courbe x et y void Space::createGnuPlotFile (const int y) { double locY, locX; // Ouverture du fichier std::ofstream file ("dataY"); // Parcours pour tous les pixels verticaux de l'image for (int i=0; ispaceNbDistPoint; i++) addSetupPoint(oconfig_->spaceTabPoint[i*4+0], oconfig_->spaceTabPoint[i*4+1], oconfig_->spaceTabPoint[i*4+2], oconfig_->spaceTabPoint[i*4+3]); std::cout << "Nombre de points loadés pour le calibrage de la distance: " << setupTab.size () << std::endl; } /// Donne les coefficients d'une ligne void Space::findCoeffLine (const double x1, const double y1, const double x2, double y2, double &a, double &b) { a = (x2 - x1) / (y2 - y1); b = x1 - a * y1; } /// Etalonnage des distances int Space::setup (const double a, const double b, const double c) { // Assignation des coefficients pour le calcul des y aY_ = a; bY_ = b; cY_ = c; // Cherche les coefficients de 2 droites double a1, b1, a2, b2; findCoeffLine (65, 9, 118, 180, a1, b1); findCoeffLine (198, 10, 192, 180, a2, b2); // Allocation de la mémoire delete [] tabY_; tabY_ = new double[imgHeight_]; delete [] tabX_; tabX_ = new double[imgHeight_*imgWidth_]; // Création du tableau de correspondance pour les x double diffPix; double unitPix; double center; for (int y=0; y