void BlocAliens::run() { dessiner(); while (true) { timer->getDeplacementAliens()->P(); if (espace->niveauTermine()) Exit(); if (direction == DEPL_BAS) { if (positionColonne <= 1) { direction = DEPL_DROITE; } else { direction = DEPL_GAUCHE; } } else if (((positionColonne + (largeur + ecartGauche) * ALIGN_HORI) >= LARGEUR + 1 && direction == DEPL_DROITE) || (positionColonne + ecartGauche * ALIGN_HORI <= 1 && direction == DEPL_GAUCHE)) { direction = DEPL_BAS; } deplacer(); tirerMissile(); } }
void BlocAliens::deplacer() { effacer(); for (int ligne = 0; ligne < hauteur; ligne++) { for (int colonne = ecartGauche; colonne < ecartGauche + largeur; colonne++) { if (getAlien(ligne, colonne) != NULL) { getAlien(ligne, colonne)->deplacerPosition(direction); } } } dessiner(); switch (direction) { case DEPL_BAS: positionLigne++; break; case DEPL_HAUT: positionLigne--; break; case DEPL_DROITE: positionColonne++; break; case DEPL_GAUCHE: positionColonne--; break; } }
// Dessin void dessiner (int x, int y, int rayon, int v) { Isn.drawCircle(x,y,rayon,0,0,0); if (rayon > 1) { if (v != DROITE) { dessiner(x + 3 * rayon / 2,y,rayon / 2,GAUCHE); } if (v != GAUCHE) { dessiner(x - 3 * rayon / 2,y,rayon / 2,DROITE); } if (v != HAUT) { dessiner(x,y - 3 * rayon / 2,rayon / 2,BAS); } if (v != BAS) { dessiner(x,y + 3 * rayon / 2,rayon / 2,HAUT); } } }
// Actions d'affichage // Ne pas changer void display(void) { glPushAttrib(GL_ALL_ATTRIB_BITS); // Effacer tout glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // la couleur et le z glLoadIdentity(); // repere camera tbVisuTransform(); // origine et orientation de la scene dessiner( ); glutSwapBuffers(); glPopAttrib(); }
void MainWindow::projeter() { M = P * T * Tplus * Rx * Ry * Rz * S * Tmoins ; points.clear(); if (ui->vue->pointsOriginaux.size()>3){ points = M * ui->vue->pointsOriginaux ; ui->vue->reseau.points.clear(); for (int i=0 ; i < points.size() ; i ++ ){ points[i] = points[i] / points[i].T() ; ui->vue->reseau.points.push_back(points[i]); } emit dessiner(); } }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); rotationWid = new Curseurs(this) ; translationWid = new Curseurs(this) ; echelleWid = new Curseurs(this) ; //---------------Préparation des curseurs dans l'interface graphique rotationWid->SetTitle("Controlleurs de rotation"); translationWid->SetTitle("Controlleurs de translation"); echelleWid->SetTitle("controlleurs d'echelle "); rotationWid->SetMultiplicateur(1); rotationWid->SetMinMaxSlider1(-180 , 180); rotationWid->SetMinMaxSlider2(-180 , 180); rotationWid->SetMinMaxSlider3(-180 , 180); rotationWid->SetValue1(0); rotationWid->SetValue2(0); rotationWid->SetValue3(0); rotationWid->Setlabels("Angle autour de l'axe X" , "Angle autour de l'axe Y" , "Angle autour de l'axe Z" ); translationWid->SetMultiplicateur(1); translationWid->SetMinMaxSlider1(-200 , 200); translationWid->SetMinMaxSlider2(-180 , 200); translationWid->SetMinMaxSlider3(-200 , 200); translationWid->SetValue1(0); translationWid->SetValue2(0); translationWid->SetValue3(0); translationWid->Setlabels("translation selon X" , "translation selon Y" , "translation selon Z" ); echelleWid->SetMultiplicateur(0.01f); echelleWid->SetMinMaxSlider1(-1000 , 1000); echelleWid->SetMinMaxSlider2(-1000 , 1000); echelleWid->SetMinMaxSlider3(-1000 , 1000); echelleWid->SetValue1(100); echelleWid->SetValue2(100); echelleWid->SetValue3(100); echelleWid->Setlabels("echelle selon X" , "echelle selon Y" , "echelle selon Z" ); //----------Initialiser les matrices ax =ay =az = tx = ty = tz = 0 ; sx = sy =sz = 1 ; S.Identite(); M = Tmoins = Tplus = T = Rx = Ry = Rz = P = S ; M.afficher(); //----------Connexions connect(ui->openB , SIGNAL(clicked()) , ui->vue , SLOT(chargerPoints3D()) ) ; connect(ui->quitterB , SIGNAL(clicked()) , this , SLOT(quitterApplication()) ) ; connect(this->rotationWid , SIGNAL(xValueChanged(float)) , this , SLOT(rotX(float)) ) ; connect(this->rotationWid , SIGNAL(yValueChanged(float)) , this , SLOT(rotY(float)) ) ; connect(this->rotationWid , SIGNAL(zValueChanged(float)) , this , SLOT(rotZ(float)) ) ; connect(this->translationWid , SIGNAL(xValueChanged(float)) , this , SLOT(translX(float)) ) ; connect(this->translationWid , SIGNAL(yValueChanged(float)) , this , SLOT(translY(float)) ) ; connect(this->translationWid , SIGNAL(zValueChanged(float)) , this , SLOT(translZ(float)) ) ; connect(this->echelleWid , SIGNAL(xValueChanged(float)) , this , SLOT(scaleX(float)) ) ; connect(this->echelleWid , SIGNAL(yValueChanged(float)) , this , SLOT(scaleY(float)) ) ; connect(this->echelleWid , SIGNAL(zValueChanged(float)) , this , SLOT(scaleZ(float)) ) ; connect(this , SIGNAL(dessiner()) , ui->vue , SLOT(reTracer()) ) ; connect(ui->vue , SIGNAL(centre(Point3D)) , this , SLOT(setCentroide(Point3D)) ) ; connect(ui->vue , SIGNAL(distancePerspective(float)) , this , SLOT(setPerspectiveMatrix(float)) ) ; connect(ui->vue , SIGNAL(visualisationInitiale()) , this , SLOT(projeter()) ) ; connect(ui->recadrerB, SIGNAL(clicked()) , ui->vue , SLOT(recadrer()) ) ; QMainWindow::showMaximized() ; points.clear(); }
// Fonction de rafraichissement gboolean expose_cb (GtkWidget *carte, GdkEventExpose *event, file_opener * donnees) { dessiner (donnees); return FALSE; }
int main() { Isn.initDrawing("DessinRécursif",10,10,400,400); dessiner(200,200,64,AUCUN); }
void EntiteBase::deplacer(int direction){ effacer(); deplacerPosition(direction); dessiner(); }
QImage Triangledetection::detect(const QImage &source, const QImage &imageBase) { //QImage binary = detectionContour(extraireRouge(source)); QImage binary = detectionContour(source); QImage detection = binary.convertToFormat(QImage::Format_RGB888); QVector<QPoint> ligne = hough(detection); std::cout << "-> Nombre de ligne detecté : " << ligne.size() << std::endl; QVector<QPoint> ligne_angle0,ligne_angle60,ligne_angle120; QPoint inter1,inter2,inter3; int l1,l2,l3; //Avoir les lignes avec des angles pouvant appartenir à un panneau (+ ou - 1°) avoirLigneAngle(ligne,ligne_angle0,90,1); avoirLigneAngle(ligne,ligne_angle0,270,1); avoirLigneAngle(ligne,ligne_angle60,150,1); avoirLigneAngle(ligne,ligne_angle60,330,1); avoirLigneAngle(ligne,ligne_angle120,210,1); avoirLigneAngle(ligne,ligne_angle120,30,1); //On determine les intersections et les longueurs des segments for(int i=0;i<ligne_angle0.size();i++) { for(int j=0;j<ligne_angle60.size();j++) { for(int k=0;k<ligne_angle120.size();k++) { inter1 = intersection(ligne_angle0[i],ligne_angle60[j]); inter2 = intersection(ligne_angle60[j],ligne_angle120[k]); inter3 = intersection(ligne_angle120[k],ligne_angle0[i]); l1 = distance(inter1,inter2); l2 = distance(inter2,inter3); l3 = distance(inter3,inter1); //Si les distance sont les mêmes et que tous les points sont dans l'image => on a un triangle if(l1 == l2 && l2 == l3 && l1 > 30 && l1 < 100 && estPointImage(detection,inter1) && estPointImage(detection,inter2) && estPointImage(detection,inter3)) { Triangle a; a.p1 = inter1; a.p2 = inter2; a.p3 = inter3; liste_triangle.push_back(a); } } } } std::cout<<"-> Nombre de triangle detectés avant élimination des doublons : " << liste_triangle.size() << std::endl; //On supprime les triangle doublons supprimerDoublon(); //Dessiner les triangles à l'écran for(int i=0;i<liste_triangle.size();i++) dessiner(detection,liste_triangle[i],qRgb(0,255,127)); //Generer les images avec les cercles reconnus for(int i=0;i<liste_triangle.size();i++) { int minX = liste_triangle[i].p1.x(); int minY = liste_triangle[i].p1.y(); int maxX = liste_triangle[i].p1.x(); int maxY = liste_triangle[i].p1.y(); if (liste_triangle[i].p2.x()<minX) minX = liste_triangle[i].p2.x(); if (liste_triangle[i].p2.y()<minY) minY = liste_triangle[i].p2.y(); if (liste_triangle[i].p2.x()>maxX) maxX = liste_triangle[i].p2.x(); if (liste_triangle[i].p2.y()>maxY) maxY = liste_triangle[i].p2.y(); if (liste_triangle[i].p3.x()<minX) minX = liste_triangle[i].p3.x(); if (liste_triangle[i].p3.y()<minY) minY = liste_triangle[i].p3.y(); if (liste_triangle[i].p3.x()>maxX) maxX = liste_triangle[i].p3.x(); if (liste_triangle[i].p3.y()>maxY) maxY = liste_triangle[i].p3.y(); QImage BlueRoadSigns = QImage(maxX-minX, maxY-minY, QImage::Format_RGB32); for(int row = 0;row<maxY-minY;row++) { for (int col=0;col<maxX-minX;col++) { QColor clrCurrent(imageBase.pixel(col+minX,row+minY)); int red = clrCurrent.red(); int green = clrCurrent.green(); int blue = clrCurrent.blue(); BlueRoadSigns.setPixel(col, row, qRgb(red,green,blue)); } } liste_TrianglesReconnu.push_back(BlueRoadSigns); } std::cout<<"-> Nombre de triangle detectés : " << liste_triangle.size() << std::endl; return detection; }