Esempio n. 1
0
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();
	}
}
Esempio n. 2
0
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;
	}
}
Esempio n. 3
0
// 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();
}
Esempio n. 7
0
// Fonction de rafraichissement
gboolean expose_cb (GtkWidget *carte, GdkEventExpose *event, file_opener * donnees)
{
  dessiner (donnees);

  return FALSE;
}
Esempio n. 8
0
int main()
{
   Isn.initDrawing("DessinRécursif",10,10,400,400);
   dessiner(200,200,64,AUCUN);
}
Esempio n. 9
0
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;
}