/*************************************************************************************************************************************/
/* */
/* R E S O L U T I O N D ' E Q U A T I O N S L I N E A I R E S I N D E T E R M I N E E S E N { X , Y , Z } : */
/* */
/* */
/* Application : */
/* */
/* Une application de ce programme de */
/* resolution "aleatoire" d'equations a trois */
/* inconnues du type : */
/* */
/* A*X + B*Y + C*Z = D */
/* */
/* est la definition de palettes de couleurs */
/* a luminance strictement croissante. On */
/* resoudra donc : */
/* */
/* 0.30*R + 0.59*V + 0.11*B = LUMINANCE */
/* */
/* ou {0.30,0.59,0.11} sont respectivement */
/* 'v $xiii/quad_image$DEF LUMINANCE_DU_'. */
/* Ainsi, pour chaque LUMINANCE dans [$NOIR,$BLANC] */
/* on calculera un triplet {R,V,B} ayant cette */
/* luminance ('v $xciP/aleatoire.01$vv$Z' qui */
/* realise cela...). */
/* */
/* */
/* Author of '$xrv/EquationsIndeterminees_3D.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20210517101353). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define UTILISER_LE_PARAMETRE_D_COMME_BORNE_SUPERIEURE \
FAUX \
/* Faut-il utiliser le parametre D pour les trois bornes superieures ('VRAI') ou bien */ \
/* prendre des valeurs par defaut ('FAUX') ? Ceci fut introduit le 20210520151707... */
#define NOMBRE_MAXIMAL_D_ITERATIONS \
MILLE \
/* Nombre maximal d'iterations de recherche d'une solution... */
#define GRAINE_X \
PARE(1789)
#define GRAINE_Y \
PARE(1947)
#define GRAINE_Z \
PARE(2001)
/* Graines de generation aleatoire... */
#define FACTEUR_X \
FRA10(FRA2(FU))
#define FACTEUR_Y \
FRA10(FRA2(FU))
#define FACTEUR_Z \
FRA10(FRA2(FU))
/* Afin de calculer les bornes inferieure et superieure de generation aleatoire... */
#define PONDERATION_X_IMPLICITE \
FZERO
#define PONDERATION_Y_IMPLICITE \
FZERO
#define PONDERATION_Z_IMPLICITE \
FZERO
/* Ponderation de selection des varaiables apres resolution... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1d.I"
/* Passage a l'allocation dynamique le 20060214175329... */
#include xrv/ARITHMET.21.I"
#include xrv/champs_5.41.I"
#define PARAMETRE_A_IMPLICITE \
FU
#define PARAMETRE_B_IMPLICITE \
FU
#define PARAMETRE_C_IMPLICITE \
FU
#define PARAMETRE_D_IMPLICITE \
FU
#define BORNE_INFERIEURE_X_IMPLICITE \
FZERO
#define BORNE_INFERIEURE_Y_IMPLICITE \
FZERO
#define BORNE_INFERIEURE_Z_IMPLICITE \
FZERO
#define BORNE_SUPERIEURE_X_IMPLICITE \
FZERO
#define BORNE_SUPERIEURE_Y_IMPLICITE \
FZERO
#define BORNE_SUPERIEURE_Z_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_des_parametres_A,liste_des_parametres_A);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_B,liste_des_parametres_B);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_C,liste_des_parametres_C);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_D,liste_des_parametres_D);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_X,liste_des_bornes_inferieures_X);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_Y,liste_des_bornes_inferieures_Y);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_Z,liste_des_bornes_inferieures_Z);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_X,liste_des_bornes_superieures_X);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_Y,liste_des_bornes_superieures_Y);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_Z,liste_des_bornes_superieures_Z);
/* Definition en memoire des fichiers. */
#define ELEMENT_DU_FICHIER_DES_PARAMETRES_A(index) \
gELEMENT_DU_FICHIER(liste_des_parametres_A,index)
#define ELEMENT_DU_FICHIER_DES_PARAMETRES_B(index) \
gELEMENT_DU_FICHIER(liste_des_parametres_B,index)
#define ELEMENT_DU_FICHIER_DES_PARAMETRES_C(index) \
gELEMENT_DU_FICHIER(liste_des_parametres_C,index)
#define ELEMENT_DU_FICHIER_DES_PARAMETRES_D(index) \
gELEMENT_DU_FICHIER(liste_des_parametres_D,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_X(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_X,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Y(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_Y,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Z(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_Z,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_X(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_superieures_X,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Y(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_superieures_Y,index)
#define ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Z(index) \
gELEMENT_DU_FICHIER(liste_des_bornes_superieures_Z,index)
/* Acces a un element courant des fichiers. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E S O L U T I O N D ' E Q U A T I O N S L I N E A I R E S I N D E T E R M I N E E S E N { X , Y , Z } : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(utiliser_le_parametre_D_comme_borne_superieure,UTILISER_LE_PARAMETRE_D_COMME_BORNE_SUPERIEURE));
/* Faut-il utiliser le parametre D pour les trois bornes superieures ('VRAI') ou bien */
/* prendre des valeurs par defaut ('FAUX') ? Ceci fut introduit le 20210520151707... */
DEFV(Positive,INIT(nombre_maximal_d_iterations,NOMBRE_MAXIMAL_D_ITERATIONS));
/* Nombre maximal d'iterations de recherche d'une solution... */
DEFV(Int,INIT(graine_X,GRAINE_X));
DEFV(Int,INIT(graine_Y,GRAINE_Y));
DEFV(Int,INIT(graine_Z,GRAINE_Z));
/* Graines de generation aleatoire... */
DEFV(Float,INIT(facteur_X,FACTEUR_X));
DEFV(Float,INIT(facteur_Y,FACTEUR_Y));
DEFV(Float,INIT(facteur_Z,FACTEUR_Z));
/* Afin de calculer les bornes inferieure et superieure de generation aleatoire... */
RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_GLOBALES;
/* Mis sous cette forme le 20210520090316... */
DEFV(Float,INIT(ponderation_X,PONDERATION_X_IMPLICITE));
DEFV(Float,INIT(ponderation_Y,PONDERATION_Y_IMPLICITE));
DEFV(Float,INIT(ponderation_Z,PONDERATION_Z_IMPLICITE));
/* Ponderation de selection des varaiables apres resolution... */
#include xrv/ARITHMET.22.I"
#include xci/valeurs.03.I"
/*..............................................................................................................................*/
#include xrv/champs_5.1A.I"
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
,BLOC(VIDE;)
,BLOC(Bblock
PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
Eblock
)
);
PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;
PROKESF_ARGUMENT_FICHIER("parametres_A="
,fichier_des_parametres_A
,liste_des_parametres_A
,PARAMETRE_A_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("parametres_B="
,fichier_des_parametres_B
,liste_des_parametres_B
,PARAMETRE_B_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("parametres_C="
,fichier_des_parametres_C
,liste_des_parametres_C
,PARAMETRE_C_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("parametres_D="
,fichier_des_parametres_D
,liste_des_parametres_D
,PARAMETRE_D_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_inferieures_X="
,fichier_des_bornes_inferieures_X
,liste_des_bornes_inferieures_X
,BORNE_INFERIEURE_X_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_inferieures_Y="
,fichier_des_bornes_inferieures_Y
,liste_des_bornes_inferieures_Y
,BORNE_INFERIEURE_Y_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_inferieures_Z="
,fichier_des_bornes_inferieures_Z
,liste_des_bornes_inferieures_Z
,BORNE_INFERIEURE_Z_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_superieures_X="
,fichier_des_bornes_superieures_X
,liste_des_bornes_superieures_X
,BORNE_SUPERIEURE_X_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_superieures_Y="
,fichier_des_bornes_superieures_Y
,liste_des_bornes_superieures_Y
,BORNE_SUPERIEURE_Y_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("bornes_superieures_Z="
,fichier_des_bornes_superieures_Z
,liste_des_bornes_superieures_Z
,BORNE_SUPERIEURE_Z_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
GET_ARGUMENT_L("parametre_D_borne_superieure=""pDbs=",utiliser_le_parametre_D_comme_borne_superieure);
GET_ARGUMENT_I("iterations=",nombre_maximal_d_iterations);
GET_ARGUMENT_I("graine_X=""gX=",graine_X);
GET_ARGUMENT_I("graine_Y=""gY=",graine_Y);
GET_ARGUMENT_I("graine_Z=""gZ=",graine_Z);
GET_ARGUMENT_F("facteur_X=""fX=",facteur_X);
GET_ARGUMENT_F("facteur_Y=""fY=",facteur_Y);
GET_ARGUMENT_F("facteur_Z=""fZ=",facteur_Z);
GET_ARGUMENT_F("pX=""Pond1=",ponderation_X);
GET_ARGUMENT_F("pY=""Pond2=",ponderation_Y);
GET_ARGUMENT_F("pZ=""Pond3=",ponderation_Z);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
/* Cette procedure fut introduite le 20211005104218... */
)
);
RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__INITIALISATION;
/* Mis sous cette forme le 20210520090316... */
gOPERATION_SUR_LES_FICHIERS(BLOC(
DEFV(Float,INIT(parametre_A,ELEMENT_DU_FICHIER_DES_PARAMETRES_A(index)));
DEFV(Float,INIT(parametre_B,ELEMENT_DU_FICHIER_DES_PARAMETRES_B(index)));
DEFV(Float,INIT(parametre_C,ELEMENT_DU_FICHIER_DES_PARAMETRES_C(index)));
DEFV(Float,INIT(parametre_D,ELEMENT_DU_FICHIER_DES_PARAMETRES_D(index)));
DEFV(Float,INIT(borne_inferieure_courante_X,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_X(index)));
DEFV(Float,INIT(borne_inferieure_courante_Y,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Y(index)));
DEFV(Float,INIT(borne_inferieure_courante_Z,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Z(index)));
DEFV(Float,INIT(borne_superieure_courante_X,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_X(index)));
DEFV(Float,INIT(borne_superieure_courante_Y,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Y(index)));
DEFV(Float,INIT(borne_superieure_courante_Z,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Z(index)));
/* Recuperation des valeurs courantes dans les fichiers. */
RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_LOCALES;
/* Mis sous cette forme le 20210520095916... */
RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D(parametre_A
,parametre_B
,parametre_C
,parametre_D
,utiliser_le_parametre_D_comme_borne_superieure
,borne_inferieure_courante_X
,borne_superieure_courante_X
,borne_inferieure_courante_Y
,borne_superieure_courante_Y
,borne_inferieure_courante_Z
,borne_superieure_courante_Z
);
/* Mis sous cette forme le 20210520090316... */
)
,LIZ3(ponderation_X,solution_X
,ponderation_Y,solution_Y
,ponderation_Z,solution_Z
)
,EDITER_LA_VALEUR_RESULTANTE_DANS_gOPERATION_SUR_LES_FICHIERS
,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
);
/* Combinaison des trois fichiers arguments. */
lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_Z,BORNE_SUPERIEURE_Z_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_Y,BORNE_SUPERIEURE_Y_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_X,BORNE_SUPERIEURE_X_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_Z,BORNE_INFERIEURE_Z_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_Y,BORNE_INFERIEURE_Y_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_X,BORNE_INFERIEURE_X_IMPLICITE);
RETU_Commande;
Eblock
ECommande