Algo - pivoter une image

Résolu
Bonjour tout le monde.

Alors voilà, j'ai expliqué mon problème sur cette vidéo qui sera plus tard effacée :
https://www.youtube.com/watch?v=g0tt_cScxB4&feature=player_embedded

Quelqu'un pourrait m'aider s'il vous plaît ? Ça fait trois jours que je cherche une relation entre l'image d'origine et une image pivoté d'un angle alpha.

Merci beaucoup d'avance :)

4 réponses

  1. Bonjour,

    Ton problème consiste à transformer des coordonnées cartésiennes en coordonnées polaires et inversement.

    http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires

    Suivant les languages, il existe des fonctions trigo toutes faites pour ça.
    Sinon, faut les programmer toi-même. Mais c'est tout à fait possible.

    Les coordonnées seront des valeurs réèlles (et non entières).

    ;)
    0
    1. Bonjour,

      Je vais faire cela en Java.
      0
      1. J'ai fait une fonction en Java là qui prend en paramètre un angle en degré mais la fonction ne fonctionne pas.

        public static void rotation(int angle)
        {
        int l=0,h=0,l2=0,h2=0,i=0,j=0,pix=0,phd=0,pbd=0;
        BufferedImage im=null,imro=null;
        try {
        im = ImageIO.read(new File("./image.bmp"));
        }
        catch (Exception e) {}
        l = im.getWidth();
        h = im.getHeight();
        phd = (int) (Math.abs((l-1)*Math.cos(angle*Math.PI/180)));
        pbd = (int) (Math.abs((l-1)*Math.sin(angle*Math.PI/180) + (h-1)*Math.cos(angle*Math.PI/180)));
        imro = new BufferedImage(phd,pbd,BufferedImage.TYPE_INT_RGB);
        for (j=0;j<l;j++) {
        for (i=0;i<h;i++) {
        pix = im.getRGB(i,j);
        imro.setRGB(Math.abs((int) (i*Math.cos(angle*Math.PI/180)-j*Math.sin(angle*Math.PI/180))),Math.abs((int)(i*Math.sin(angle*Math.PI/180) + j*Math.cos(angle*Math.PI/180))),pix);
        }
        }
        try {
        ImageIO.write(imro,"png",new File("rotation.png"));
        }
        catch (Exception e) {};
        }

        Pouvez-vous me trouvez mes erreurs s'il vous plaît car je ne trouve pas.

        Informations : PHD pour pixel en haut à droite et PBD pour pixel en bas à droite.

        Merci beaucoup.
        0
        1. J'ai inversé un h et un l, maintenant ça ne fonctionne qu'à condition que je définisse moi même l'image de départ.
          Pouvez-vous m'aider à définir la taille de la nouvelle image s'il vous plaît ?

          De plus, j'ai fait une autre fonction récursive qui s'occupe de 90, 180 et 270° mais seul le 90° fonctionne.

          public static void rotation90(int nb, BufferedImage im)
          {
          int l=0,h=0,i=0,j=0,pix=0;
          BufferedImage imro;
          l = im.getWidth();
          h = im.getHeight();
          imro = new BufferedImage(h,l,BufferedImage.TYPE_INT_RGB);
          for (j=0;j<h;j++) {
          for (i=0;i<l;i++) {
          pix = im.getRGB(i,j);
          imro.setRGB(h-j-1,l-i-1,pix);
          }
          }
          if (nb == 1) {
          try {
          ImageIO.write(imro,"png",new File("rotation.png"));
          }
          catch (Exception e) {};
          }
          else {
          if(nb == 2) {
          rotation90(1,imro);
          }
          else {
          rotation90(2,imro);
          }
          }
          }

          Pouvez-vous m'aider s'il vous plaît ?
          0
          1. Je vais poster tout ça ailleurs sur ce forum ça sera mieux.
            0