diff --git a/Makefile b/Makefile index 5b323ea..6f53394 100644 --- a/Makefile +++ b/Makefile @@ -23,10 +23,10 @@ $(EXEPATH)testing: $(OBJPATH)testing.o $(OBJPATH)image.o # Dépendances ## Fichiers executables -$(OBJPATH)main.o: $(SRCPATH)main.cpp $(SRCPATH)image.h +$(OBJPATH)main.o: $(SRCPATH)main.cpp $(SRCPATH)affichageFenetre.cpp $(SRCPATH)image.cpp $(SRCPATH)traitementImage.cpp $(SRCPATH)analyserCommande.cpp $(CXX) -c $< -o $@ $(CXXFLAGS) -$(OBJPATH)testing.o: $(SRCPATH)testing.cpp $(SRCPATH)image.cpp +$(OBJPATH)testing.o: $(SRCPATH)testing.cpp $(SRCPATH)affichageFenetre.cpp $(SRCPATH)image.cpp $(SRCPATH)traitementImage.cpp $(SRCPATH)analyserCommande.cpp $(CXX) -c $< -o $@ $(CXXFLAGSDEBUG) ## Bibliothèques $(OBJPATH)image.o: $(SRCPATH)image.cpp diff --git a/TODO.md b/TODO.md index 62fc85a..8e14717 100644 --- a/TODO.md +++ b/TODO.md @@ -41,7 +41,7 @@ * Disque **D** * Géométrie **D** * Zoomer - * Pivoter + * Pivoter **C** * Retourner **D** * Redimensionner **A** * Conversion du mode **D** diff --git a/src/analyserCommande.cpp b/src/analyserCommande.cpp index 221e941..9055a81 100644 --- a/src/analyserCommande.cpp +++ b/src/analyserCommande.cpp @@ -16,7 +16,7 @@ void afficherImage(Image image) { fermerFenetre(); } - ouvrirFenetre(dimensionX, dimensionY, "PILG - Test"); + ouvrirFenetre(dimensionX, dimensionY, "PILG"); for (x = 0; x < dimensionX; x++) { for (y = 0; y < dimensionY; y++) { diff --git a/src/image.cpp b/src/image.cpp index 467bba9..478cbe7 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -33,6 +33,7 @@ int Image::g_pixel(unsigned int x, unsigned int y, Pixel &pixel) const { pixel = m_tab[x][y]; return 0; } else { + pixel = g_pixelVide(); return 1; } } @@ -60,14 +61,16 @@ Pixel Image::g_pixelVide() const { pixel.g = 0; break; case PILG_RVB: - pixel.r = 0; - pixel.b = 0; - pixel.v = 0; + pixel.r = pixel.v = pixel.b = 0; break; } return pixel; } +Image Image::g_vide() const { + return Image(m_dimensionX, m_dimensionY, m_maxComposante, m_typeComposantes); +} + // Validateurs bool Image::v_pixel(Pixel pixel) const { if (pixel.typeComposantes == m_typeComposantes diff --git a/src/image.h b/src/image.h index 5cfd489..db83601 100644 --- a/src/image.h +++ b/src/image.h @@ -25,6 +25,7 @@ public: int s_pixel(unsigned int x, unsigned int y, Pixel pixel); // Utilitaires Pixel g_pixelVide() const; + Image g_vide() const; // Validateurs bool v_pixel(Pixel pixel) const; bool v_dimensions(unsigned int x, unsigned int y) const; diff --git a/src/testing.cpp b/src/testing.cpp index 43889f6..76f8ab9 100644 --- a/src/testing.cpp +++ b/src/testing.cpp @@ -8,6 +8,8 @@ using namespace std; #include "traitementImage.cpp" #include "analyserCommande.cpp" +#define PI 3.14159265359 + Image genererRoue(int dimX, int dimY, int maxComposante) { Image imageRoue(dimX, dimY, maxComposante, PILG_RVB); Pixel pointRoue = imageRoue.g_pixelVide(); @@ -102,7 +104,7 @@ int main(int argc, char *args[]) { freopen("CON", "w", stderr); #endif - cout << "PILG - Debug" << endl; // Message d'entrée et de test + cout << "PILG - Test" << endl; // Message d'entrée et de test // // Analyse de commandes // if (argc > 1) { @@ -115,21 +117,17 @@ int main(int argc, char *args[]) { // boucleDeCommandes(); // } - // // Afficher image par défaut - // // Image image = genererRoue(200, 200, 255); - // // Image image = genererDegrade(200, 200, 255); - // Image image = genererBruit(200, 200); - // Pixel couleurRectangle; + #define DIMENSIONS 256 - // couleurRectangle = image.g_pixelVide(); - // // couleurRectangle.b = 255; - // // couleurRectangle.g = 255; - // couleurRectangle.b = true; + Image imageOriginale = genererRoue(DIMENSIONS, DIMENSIONS, 255); + Image image = imageOriginale.g_vide(); + while(1) { + for (float i = 0; i < 2 * PI; i += 0.1) { + pivoter(imageOriginale, image, DIMENSIONS/2, DIMENSIONS/2, i); + afficherImage(image); + } + } - // rectangle(image, image, 5, 5, 10, 10, couleurRectangle); - - // afficherImage(image); - // attendreFenetre(); // // Neige en dégradé // for (int i; i < 300; i++) { @@ -170,8 +168,7 @@ int main(int argc, char *args[]) { // } // cout << "Éxecution du programme terminée. Vous pouvez quitter la fenêtre." << endl; - // attendreFenetre(); - // fermerFenetre(); + fermerFenetre(); return 0; } diff --git a/src/traitementImage.cpp b/src/traitementImage.cpp index b44787d..788dd8f 100644 --- a/src/traitementImage.cpp +++ b/src/traitementImage.cpp @@ -1,7 +1,10 @@ +#include + +#define PI 3.14159265359 + // Gestion de fichiers void creer(Image &sortie, unsigned int dimensionX, unsigned int dimensionY, unsigned int maxComposante, PILG_Comp typeComposantes) { // Créer une image de dimensions X et Y - Image *nouvelle = new Image(dimensionX, dimensionY, maxComposante, typeComposantes); - sortie = *nouvelle; + sortie = *new Image(dimensionX, dimensionY, maxComposante, typeComposantes); } void ouvrir(Image &sortie, string nomFichier) { // Ouvrir une image existante à partir du nom du fichier ***Geoffrey @@ -147,8 +150,27 @@ void zoom(Image entree, Image &sortie) { } -void pivoter(Image entree, Image &sortie) { - +void pivoter(Image entree, Image &sortie, int x0, int y0, float angle) { + sortie = entree.g_vide(); + float xF, yF, angleF, xI, yI, angleI, h; + Pixel pixel = entree.g_pixelVide(); + for (xF = 0; xF < entree.g_dimensionX(); xF++) { + for (yF = 0; yF < entree.g_dimensionY(); yF++) { + if (xF == x0 && yF == y0) { + xI = x0; + yI = y0; + } else { + angleF = atan((yF-y0)/(xF-x0)); + angleF = (xF-x0<0 ? angleF + PI : (yF-y0 ? angleF + 2*PI: angleF)); + angleI = angleF - angle; + h = sqrt(pow(xF-x0, 2)+pow(yF-y0, 2)); + xI = cos(angleI)*h+x0; + yI = sin(angleI)*h+y0; + } + entree.g_pixel((int) xI, (int) yI, pixel); + sortie.s_pixel((int) xF, (int) yF, pixel); + } + } } void retourner(Image entree, Image &sortie, int rotation) {