void Button::draw(cv::Mat& img){ cv::Point pos(x,y); cv::circle(img,pos, this->size,cv::Scalar(255,0,0),2, 8, 0 ); cv::Point origine(this->x - this->size +5 ,this->y +5); cv::putText(img,this->name, origine,cv::FONT_HERSHEY_SIMPLEX,0.5,CV_RGB(255,255,255),2,8,false); }
void EnveloppeConvexe::compute(){ // pour protéger monEnsembleDePoints, mais pas indispensable cout<<"!-- entree de EnveloppeConvexe::compute()"<<endl; EnsembleDePoints* EnsPoints = monEnsembleDePoints; //recherche du point d'ordonnee minimum IteratorEnsembleDePoints begin = EnsPoints->begin(); IteratorEnsembleDePoints end = EnsPoints->end(); IteratorEnsembleDePoints courant = begin; double mini = numeric_limits<double>::max(); while (begin != end){ if(begin->imag() < mini) { mini = begin->imag(); courant = begin; } begin++; } // fin de recherche du point d'ordonnée minimum = *courant // cout<< "courant mini = "<<*courant<<endl; // on retire ce point de Interieur IteratorEnsembleDePoints beginInterieur = Interieur.begin(); IteratorEnsembleDePoints endInterieur = Interieur.end(); while (beginInterieur != endInterieur && *beginInterieur != *courant ) beginInterieur++; Interieur.erase(beginInterieur); // initialisation avant la boucle principale // premier argument de computeTableauPondere complex<double> origine(0,0); // deuxième argument de computeTableauPondere complex<double> extremite = *courant; // le premier élément de Enveloppe Enveloppe.push_back(extremite); // boucle principale IteratorEnsembleDePoints first = EnsPoints->begin(); IteratorEnsembleDePoints last = EnsPoints->end(); // on parcours EnsPoints while (first != last){ //recherche du point d'angle minimum // création du tableau (double, complex) // ATTENTION = le premier élément d'une map doit être d'un // type ordonnée. Donc pas complex !! MapDoubleComplex Map = computeTableauPondere(origine, extremite); // recherche dans Map du point d'angle minimum ItMap begin = Map.begin(); ItMap end = Map.end(); ItMap courant = begin; double min = 99999;// numeric_limits<double>::min(); while (begin != end){ if(begin->first < min) { min = begin->first; courant = begin; } begin++; } // fin de recherche dans Map du point d'angle minimum // cout<< "angle mini = "<<courant->first<<" point "<<courant->second<<endl<<endl; // recherche dans monEnsembleDePoints du point d'angle minimum IteratorEnsembleDePoints premier = EnsPoints->begin(); IteratorEnsembleDePoints dernier = EnsPoints->end(); while(premier != dernier && *premier != courant->second) premier++; if(premier != dernier) { // on prépare l'appel à computeTableauPondere origine = extremite; extremite = *premier; // on recherche la présence de ce point dans Enveloppe IteratorEnsembleDePoints beginEnveloppe = Enveloppe.begin(); IteratorEnsembleDePoints endEnveloppe = Enveloppe.end(); while (beginEnveloppe != endEnveloppe && *beginEnveloppe != extremite ) beginEnveloppe++; // si ce point n'est pas déjà dans Enveloppe, on l'ajoute à Enveloppe // et on le retire de Interieur if(beginEnveloppe == endEnveloppe){ Enveloppe.push_back(extremite); // on le retire de Interieur IteratorEnsembleDePoints beginInterieur = Interieur.begin(); IteratorEnsembleDePoints endInterieur = Interieur.end(); while (beginInterieur != endInterieur && *beginInterieur != extremite ) beginInterieur++; Interieur.erase(beginInterieur); } } first++; } // fin de la boucle principale //cout<<"Enveloppe = \n"<<toString(Enveloppe)<<endl<<endl; //cout<<"Interieur = \n"<<toString(Interieur)<<endl; //emit SIGNAL_Evc(Enveloppe,Interieur ); cout<<"<!-- sortie de EnveloppeConvexe::compute()"<<endl; }