/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F A C T O R I S A T I O N   D E   ' $tailleI '  :                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/f_tailleI.02$c' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20090430183744).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

#include  "INCLUDES.01.I"

#define   RAPPORT_dimX_sur_dimY_DE_BALAYAGE                                                                                             \
                    1.4
#define   RAPPORT_dimX_sur_dimY_RECHERCHE                                                                                               \
                    1.4

main()
          {
          int       tailleI;
          int       la_factorisation_est_possible=FAUX;
          int       dim,dimInf,dimSup;
          int       dimX,dimY;
          int       BdimX,BdimY;
          double    minimum_dimX_sur_dimY_relatif=1000000000;
                                        /* La notion de "Best" 'dimX' et 'dimY' a ete introduit le 20090503100611 : il s'agit        */
                                        /* du couple {dimX,dimY} dont le rapport 'dimX/dimY' soit le plus proche de la valeur        */
                                        /* recherchee 'RAPPORT_dimX_sur_dimY_RECHERCHE'.                                             */

          Get(tailleI,"tailleI");
          printf("tailleI=%d\n",tailleI);
          printf("\n");

          dim = (int)sqrt((double)tailleI);
          dimInf = (int)((double)dim/RAPPORT_dimX_sur_dimY_DE_BALAYAGE);
          dimSup = (int)((double)dim*RAPPORT_dimX_sur_dimY_DE_BALAYAGE);

          for       (dimY=dimInf ; dimY <= dimSup ; dimY++)
                    {
                    for       (dimX=dimInf ; dimX <= dimSup ; dimX++)
                              {
                              if        ((dimX*dimY) == tailleI)
                                        {
                                        double    dimX_sur_dimY=(((double)dimX)/((double)dimY));
                                        double    dimX_sur_dimY_relatif;

                                        dimX_sur_dimY_relatif=ABSO(dimX_sur_dimY-RAPPORT_dimX_sur_dimY_RECHERCHE);;

                                        if        (dimX_sur_dimY_relatif < minimum_dimX_sur_dimY_relatif)
                                                  {
                                                  BdimX = dimX;
                                                  BdimY = dimY;
                                                  minimum_dimX_sur_dimY_relatif = dimX_sur_dimY_relatif;
                                                  }
                                        else
                                                  {
                                                  }

                                        printf("dimX=%d dimY=%d   dimX/dimY=%f\n",dimX,dimY,dimX_sur_dimY);
                                        /* Malheureusement bien souvent la decomposition de '$tailleI' n'est pas unique. C'est       */
                                        /* ainsi le cas en format 'Pal' qui donne :                                                  */
                                        /*                                                                                           */
                                        /*                  dimX=897  dimY=500                                                       */
                                        /*                  dimX=780  dimY=575                                                       */
                                        /*                  dimX=750  dimY=598                                                       */
                                        /*                  dimX=690  dimY=650                                                       */
                                        /*                  dimX=650  dimY=690                                                       */
                                        /*                  dimX=598  dimY=750                                                       */
                                        /*                  dimX=575  dimY=780                                                       */
                                        /*                  dimX=500  dimY=897                                                       */
                                        /*                                                                                           */
                                        /* pour 'RAPPORT_dimX_sur_dimY_DE_BALAYAGE=1.4'.                                             */
                                        /*                                                                                           */
                                        /* Cela rend ce processus non utilisable lors du redimensionnement automatique des images    */
                                        /* dans 'v $xiii/files$FON CHoi.taille_de_imageR.' lorsqu'aucun des formats de base des      */
                                        /* images n'a ete reconnu...                                                                 */
                                        /*                                                                                           */
                                        /* Cela est vrai aussi de formats plus "exotiques". Ainsi '999x999' donne :                  */
                                        /*                                                                                           */
                                        /*                  dimX=1369 dimY=729                                                       */
                                        /*                  dimX=999  dimY=999                                                       */
                                        /*                                                                                           */
                                        /* alors que '1000x1000' donne :                                                             */
                                        /*                                                                                           */
                                        /*                  dimX=1250 dimY=800                                                       */
                                        /*                  dimX=1000 dimY=1000                                                      */
                                        /*                                                                                           */
                                        /* Il y a donc en general ambiguite...                                                       */

                                        la_factorisation_est_possible = VRAI;
                                        /* La factorisation est donc possible...                                                     */
                                        }
                              else
                                        {
                                        }
                              }
                    }

          if        (la_factorisation_est_possible == VRAI)
                    {
                    printf("\n");
                    printf("BEST : dimX=%d dimY=%d   dimX/dimY=%f\n",BdimX,BdimY,((double)BdimX)/((double)BdimY));
                    }
          else
                    {
                    printf("La factorisation de %d est impossible.\n",tailleI);
                    }
          }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.