/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A */ /* D E S F R A C T I O N R A T I O N N E L L E S C O N S T I T U E E S */ /* D E P O L Y N O M E S D E D E G R E 9 : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une sequence */ /* de valeurs numeriques flottantes obtenues */ /* par calcul d'une fonction du type : */ /* */ /* 9 8 7 6 5 4 3 2 1 0 */ /* n .x + n .x + n .x + n .x + n .x + n .x + n .x + n .x + n .x + n .x */ /* 9 8 7 6 5 4 3 2 1 0 */ /* R.------------------------------------------------------------------------------- */ /* 9 8 7 6 5 4 3 2 1 0 */ /* d .x + d .x + d .x + d .x + d .x + d .x + d .x + d .x + d .x + d .x */ /* 9 8 7 6 5 4 3 2 1 0 */ /* */ /* */ /* Author of '$xci/valeurs_poly$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1992??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define INTERPOLER_PAR_DES_SPLINES_CUBIQUES \ VRAI \ /* Cet indicateur permet la selection entre une interpolation "cubique" ('VRAI') ou bien */ \ /* "lineaire" ('FAUX'). */ #include xci/sequence.01.I" #define RAYON_DE_DEPART \ FU #define DERIVEE_DU_RAYON_DE_DEPART \ FZERO /* Definition du facteur multiplicatif 'R' de depart et de sa derivee. */ #define RAYON_D_ARRIVEE \ FU #define DERIVEE_DU_RAYON_D_ARRIVEE \ FZERO /* Definition du facteur multiplicatif 'R' d'arrivee et de sa derivee. */ #define X_DE_DEPART \ FZERO #define DERIVEE_DE_L_X_DE_DEPART \ FZERO /* Definition de la variable 'x' de depart et de sa derivee. */ #define X_D_ARRIVEE \ FU #define DERIVEE_DE_L_X_D_ARRIVEE \ FZERO /* Definition de la variable 'x' d'arrivee et de sa derivee. */ #define COEFFICIENT_N00 \ FU #define COEFFICIENT_N01 \ FU #define COEFFICIENT_N02 \ FU #define COEFFICIENT_N03 \ FZERO #define COEFFICIENT_N04 \ FZERO #define COEFFICIENT_N05 \ FZERO #define COEFFICIENT_N06 \ FZERO #define COEFFICIENT_N07 \ FZERO #define COEFFICIENT_N08 \ FZERO #define COEFFICIENT_N09 \ FZERO /* Definition des coefficients du polynome du Numerateur (initialise sur un polynome */ /* du second degre). */ /* */ /* Le coefficient 'A9' fut introduit le 20070905110308... */ #define COEFFICIENT_D00 \ FU #define COEFFICIENT_D01 \ FZERO #define COEFFICIENT_D02 \ FZERO #define COEFFICIENT_D03 \ FZERO #define COEFFICIENT_D04 \ FZERO #define COEFFICIENT_D05 \ FZERO #define COEFFICIENT_D06 \ FZERO #define COEFFICIENT_D07 \ FZERO #define COEFFICIENT_D08 \ FZERO #define COEFFICIENT_D09 \ FZERO /* Definition des coefficients du polynome du Denominateur (initialise sur un polynome */ /* de degre zero). Ceci fut introduit le 20070906115342. */ #define DIVISER_LES_COEFFICIENTS_PAR_LES_FACTORIELLES_APPROPRIEES \ FAUX \ /* Faut-il diviser les coefficients du polynome par les factorielles ('VRAI') ou les */ \ /* utiliser tels quels ('FAUX') ? Ceci fut introduit le 20070904125619 et la valeur par */ \ /* defaut garantit la compatibilite anterieure... */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define COEFFICIENT(coefficient,indice) \ COND(IL_FAUT(diviser_les_coefficients_par_les_factorielles_appropriees) \ ,DIVI(coefficient,FACT(indice)) \ ,NEUT(coefficient) \ ) \ /* Coefficient effectif du polynome (introduit le 20070904125619). */ #include xci/valeurs.02.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A */ /* D E S F R A C T I O N R A T I O N N E L L E S C O N S T I T U E E S */ /* D E P O L Y N O M E S D E D E G R E 9 : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Logical,INIT(interpoler_par_des_splines_cubiques,INTERPOLER_PAR_DES_SPLINES_CUBIQUES)); /* Cet indicateur permet la selection entre une interpolation "cubique" ('VRAI') ou bien */ /* "lineaire" ('FAUX'). */ DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE)); /* Numero de la derniere image. */ DEFV(Int,INIT(numero_d_image,UNDEF)); /* Numero de l'image courante. */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Float,INIT(rayon_de_depart,RAYON_DE_DEPART)); DEFV(Float,INIT(derivee_du_rayon_de_depart,DERIVEE_DU_RAYON_DE_DEPART)); /* Definition du facteur multiplicatif 'R' d'arrivee et de sa derivee. */ DEFV(Float,INIT(rayon_d_arrivee,RAYON_D_ARRIVEE)); DEFV(Float,INIT(derivee_du_rayon_d_arrivee,DERIVEE_DU_RAYON_D_ARRIVEE)); /* Definition du facteur multiplicatif 'R' de depart et de sa derivee. */ DEFV(Float,INIT(X_de_depart,X_DE_DEPART)); DEFV(Float,INIT(derivee_de_l_X_de_depart,DERIVEE_DE_L_X_DE_DEPART)); /* Definition de la variable 'x' d'arrivee et de sa derivee. */ DEFV(Float,INIT(X_d_arrivee,X_D_ARRIVEE)); DEFV(Float,INIT(derivee_de_l_X_d_arrivee,DERIVEE_DE_L_X_D_ARRIVEE)); /* Definition de la variable 'x' de depart et de sa derivee. */ DEFV(Float,INIT(n00,COEFFICIENT_N00)); DEFV(Float,INIT(n01,COEFFICIENT_N01)); DEFV(Float,INIT(n02,COEFFICIENT_N02)); DEFV(Float,INIT(n03,COEFFICIENT_N03)); DEFV(Float,INIT(n04,COEFFICIENT_N04)); DEFV(Float,INIT(n05,COEFFICIENT_N05)); DEFV(Float,INIT(n06,COEFFICIENT_N06)); DEFV(Float,INIT(n07,COEFFICIENT_N07)); DEFV(Float,INIT(n08,COEFFICIENT_N08)); DEFV(Float,INIT(n09,COEFFICIENT_N09)); /* Definition des coefficients du polynome du Numerateur (initialise sur un polynome */ /* du second degre). */ /* */ /* Le coefficient 'n09' fut introduit le 20070905110308... */ DEFV(Float,INIT(d00,COEFFICIENT_D00)); DEFV(Float,INIT(d01,COEFFICIENT_D01)); DEFV(Float,INIT(d02,COEFFICIENT_D02)); DEFV(Float,INIT(d03,COEFFICIENT_D03)); DEFV(Float,INIT(d04,COEFFICIENT_D04)); DEFV(Float,INIT(d05,COEFFICIENT_D05)); DEFV(Float,INIT(d06,COEFFICIENT_D06)); DEFV(Float,INIT(d07,COEFFICIENT_D07)); DEFV(Float,INIT(d08,COEFFICIENT_D08)); DEFV(Float,INIT(d09,COEFFICIENT_D09)); /* Definition des coefficients du polynome du Denominateur (initialise sur un polynome */ /* de degre zero). Ceci fut introduit le 20070906115342. */ DEFV(Logical,INIT(diviser_les_coefficients_par_les_factorielles_appropriees ,DIVISER_LES_COEFFICIENTS_PAR_LES_FACTORIELLES_APPROPRIEES ) ); /* Faut-il diviser les coefficients du polynome par les factorielles ('VRAI') ou les */ /* utiliser tels quels ('FAUX') ? Ceci fut introduit le 20070904125619 et la valeur par */ /* defaut garantit la compatibilite anterieure... */ DEFV(Float,INIT(rayon_courant,FLOT__UNDEF)); /* Definition du facteur multiplicatif 'R' courant. */ DEFV(Float,INIT(X_courant,FLOT__UNDEF)); /* Definition de la variable 'x' courante. */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("cubique=",interpoler_par_des_splines_cubiques); GET_ARGUMENT_N("lineaire=",interpoler_par_des_splines_cubiques); GET_ARGUMENT_I("premiere=""p=""D=",premiere_image); GET_ARGUMENT_I("derniere=""d=""A=",derniere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_F("rd=""rD=",rayon_de_depart); GET_ARGUMENT_F("drd=""drD=",derivee_du_rayon_de_depart); GET_ARGUMENT_F("ra=""rA=",rayon_d_arrivee); GET_ARGUMENT_F("dra=""drA=",derivee_du_rayon_d_arrivee); GET_ARGUMENT_F("xd=""xD=""Xd=""XD=""VD=",X_de_depart); GET_ARGUMENT_F("dXd=""dXD=",derivee_de_l_X_de_depart); GET_ARGUMENT_F("xa=""xA=""Xa=""XA=""VA=",X_d_arrivee); GET_ARGUMENT_F("dXa=""dXA=",derivee_de_l_X_d_arrivee); GET_ARGUMENT_F("n00=""a00=""a0=""N00=""A00=""A0=",n00); GET_ARGUMENT_F("n01=""a01=""a1=""N01=""A01=""A1=",n01); GET_ARGUMENT_F("n02=""a02=""a2=""N02=""A02=""A2=",n02); GET_ARGUMENT_F("n03=""a03=""a3=""N03=""A03=""A3=",n03); GET_ARGUMENT_F("n04=""a04=""a4=""N04=""A04=""A4=",n04); GET_ARGUMENT_F("n05=""a05=""a5=""N05=""A05=""A5=",n05); GET_ARGUMENT_F("n06=""a06=""a6=""N06=""A06=""A6=",n06); GET_ARGUMENT_F("n07=""a07=""a7=""N07=""A07=""A7=",n07); GET_ARGUMENT_F("n08=""a08=""a8=""N08=""A08=""A8=",n08); GET_ARGUMENT_F("n09=""a09=""a9=""N09=""A09=""A9=",n09); GET_ARGUMENT_F("d00=""b00=""b0=""D00=""B00=""B0=",d00); GET_ARGUMENT_F("d01=""b01=""b1=""D01=""B01=""B1=",d01); GET_ARGUMENT_F("d02=""b02=""b2=""D02=""B02=""B2=",d02); GET_ARGUMENT_F("d03=""b03=""b3=""D03=""B03=""B3=",d03); GET_ARGUMENT_F("d04=""b04=""b4=""D04=""B04=""B4=",d04); GET_ARGUMENT_F("d05=""b05=""b5=""D05=""B05=""B5=",d05); GET_ARGUMENT_F("d06=""b06=""b6=""D06=""B06=""B6=",d06); GET_ARGUMENT_F("d07=""b07=""b7=""D07=""B07=""B7=",d07); GET_ARGUMENT_F("d08=""b08=""b8=""D08=""B08=""B8=",d08); GET_ARGUMENT_F("d09=""b09=""b9=""D09=""B09=""B9=",d09); GET_ARGUMENT_L("factorielles=""fact=",diviser_les_coefficients_par_les_factorielles_appropriees); /* Parametres introduits le 20070904125619... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226185829... */ ) ); Test(IFLT(premiere_image,derniere_image)) /* ATTENTION : on ne peut ecrire : */ /* */ /* Test(IFLE(premiere_image,derniere_image)) */ /* */ /* a cause de 'iINTERPOLATION_...(...)' qui calcule 'derniere_image-premiere_image' */ /* ('v $xci/valeurs.02$I iTRANSFORMATION'). */ Bblock DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock Test(IL_FAUT(interpoler_par_des_splines_cubiques)) Bblock EGAL(rayon_courant ,iINTERPOLATION_CUBIQUE(rayon_de_depart,derivee_du_rayon_de_depart ,rayon_d_arrivee,derivee_du_rayon_d_arrivee ,numero_d_image ,premiere_image,derniere_image ) ); /* Interpolation cubique du facteur multiplicatif 'R'. */ EGAL(X_courant ,iINTERPOLATION_CUBIQUE(X_de_depart,derivee_de_l_X_de_depart ,X_d_arrivee,derivee_de_l_X_d_arrivee ,numero_d_image ,premiere_image,derniere_image ) ); /* Interpolation cubique de la variable 'X' courante. */ Eblock ATes Bblock EGAL(rayon_courant ,iINTERPOLATION_LINEAIRE(rayon_de_depart,derivee_du_rayon_de_depart ,rayon_d_arrivee,derivee_du_rayon_d_arrivee ,numero_d_image ,premiere_image,derniere_image ) ); /* Interpolation lineaire du facteur multiplicatif 'R'. */ EGAL(X_courant ,iINTERPOLATION_LINEAIRE(X_de_depart,derivee_de_l_X_de_depart ,X_d_arrivee,derivee_de_l_X_d_arrivee ,numero_d_image ,premiere_image,derniere_image ) ); /* Interpolation lineaire de la variable 'X' courante. */ Eblock ETes begin_nouveau_block Bblock DEFV(Float,INIT(numerateur ,HORNER_1_09(X_courant ,COEFFICIENT(n09,NEUF) ,COEFFICIENT(n08,HUIT) ,COEFFICIENT(n07,SEPT) ,COEFFICIENT(n06,SIX) ,COEFFICIENT(n05,CINQ) ,COEFFICIENT(n04,QUATRE) ,COEFFICIENT(n03,TROIS) ,COEFFICIENT(n02,DEUX) ,COEFFICIENT(n01,UN) ,COEFFICIENT(n00,ZERO) ) ) ); DEFV(Float,INIT(denominateur ,HORNER_1_09(X_courant ,COEFFICIENT(d09,NEUF) ,COEFFICIENT(d08,HUIT) ,COEFFICIENT(d07,SEPT) ,COEFFICIENT(d06,SIX) ,COEFFICIENT(d05,CINQ) ,COEFFICIENT(d04,QUATRE) ,COEFFICIENT(d03,TROIS) ,COEFFICIENT(d02,DEUX) ,COEFFICIENT(d01,UN) ,COEFFICIENT(d00,ZERO) ) ) ); /* Cette "optimisation" assez inhabituelle chez moi est due a l'utilisation de 'DIVZ(...)' */ /* ci-apres ; elle permet de limiter la complexite du code alors genere... */ CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n")) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(MUL2(rayon_courant ,DIVZ(numerateur,denominateur) ) ) ) ) ); /* Et enfin, edition de la valeur de la fraction rationnelle... */ Eblock end_nouveau_block Eblock EDoI Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande