/*************************************************************************************************************************************/ /* */ /* 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); } }