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