/*************************************************************************************************************************************/
/* */
/* 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