/*************************************************************************************************************************************/ /* */ /* 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 */ /* U N E S P I R A L E D E F I B O N A C C I S U R U N E S P H E R E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande permet de generer des */ /* couples {u,v} (soit {latitude,longitude} */ /* ou encore {theta,phi}) : */ /* */ /* u = latitude = theta */ /* v = longitude = phi */ /* */ /* de points harmonieusement disposes sur une */ /* sphere... */ /* */ /* */ /* Author of '$xci/valeurs_SpiraleFibonacci$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20131022093132). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_MINI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" #define PARAMETRE \ SOUS(NOMBRE_D_OR,FU) \ /* Definition de l'unique parametre... */ #define TRANSLATION_u \ PI_SUR_2 \ /* Afin de mettre 'u' dans [0,pi] par defaut... */ #define UTILISER_LES_COORDONNEES_CARTESIENNES \ FAUX \ /* Afin de choisir entre les coordonnees cartesiennes ('VRAI') et les coordonnees */ \ /* spheriques ('VRAI')... */ #define ETRE_COMPATIBLE_EN_RHO_PHI_THETA \ FAUX \ /* Afin d'etre compatible avec 'v $xrv/optimise.01$K' en coordonnees spheriques */ \ /* (introduit le 20131023163020). */ #define RAYON \ FU \ /* Rayon utile dans le cas d'une conversion en coordonnees cartesiennes (introduit le */ \ /* 20131023155709). */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #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 */ /* U N E S P I R A L E D E F I B O N A C C I S U R U N E S P H E R E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock 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(parametre,PARAMETRE)); /* Definition de l'unique parametre... */ DEFV(Float,INIT(translation_u,TRANSLATION_u)); /* Afin de mettre 'u' dans [0,pi] par defaut... */ DEFV(Logical,INIT(utiliser_les_coordonnees_cartesiennes,UTILISER_LES_COORDONNEES_CARTESIENNES)); /* Afin de choisir entre les coordonnees cartesiennes ('VRAI') et les coordonnees */ /* spheriques ('VRAI')... */ DEFV(Logical,INIT(etre_compatible_en_rho_phi_theta,ETRE_COMPATIBLE_EN_RHO_PHI_THETA)); /* Afin d'etre compatible avec 'v $xrv/optimise.01$K' en coordonnees spheriques */ /* (introduit le 20131023163020). */ DEFV(Float,INIT(rayon,RAYON)); /* Rayon utile dans le cas d'une conversion en coordonnees cartesiennes (introduit le */ /* 20131023155709). */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(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("parametre=""para=",parametre); GET_ARGUMENT_F("translation_u=""tu=",translation_u); GET_ARGUMENT_L("cartesiennes=""cartesienne=""c=",utiliser_les_coordonnees_cartesiennes); GET_ARGUMENT_N("spheriques=""spherique=""s=",utiliser_les_coordonnees_cartesiennes); GET_ARGUMENT_L("compatible_rho_phi_theta=""compatible=""rho_phi_theta=""rpt=" ,etre_compatible_en_rho_phi_theta ); GET_ARGUMENT_F("rayon=""r=",rayon); /* Arguments introduits le 20131023155709... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; ) ); Test(IFLE(premiere_image,derniere_image)) Bblock DEFV(Float,INIT(parametre_effectif,MUL2(CERCLE_TRIGONOMETRIQUE,parametre))); DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock DEFV(Float,INIT(numero_effectif,SOUS(numero_d_image,premiere_image))); DEFV(Float,INIT(u,FLOT__UNDEF)); DEFV(Float,INIT(v,FLOT__UNDEF)); /* Definition du couple {u,v} (soit {latitude,longitude} ou encore {theta,phi}). */ EGAL(v,DIVI(MUL2(numero_effectif,parametre_effectif),CERCLE_TRIGONOMETRIQUE)); EGAL(v,MUL2(SOUS(v,AINT(v)),CERCLE_TRIGONOMETRIQUE)); Test(IFGT(v,PI)) Bblock EGAL(v,SOUS(v,CERCLE_TRIGONOMETRIQUE)); Eblock ATes Bblock Eblock ETes EGAL(u ,ADD2(ASIX(ADD2(NEGA(RAYON_DU_CERCLE_TRIGONOMETRIQUE) ,DIVI(DOUB(numero_effectif),SOUS(derniere_image,premiere_image)) ) ) ,translation_u ) ); Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes)) Bblock CAL2(Prin2(Cara(chain_Aconcaten4(" X=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(Xcartesienne_3D(rayon,v,u))) ) ); CAL2(Prin2(Cara(chain_Aconcaten4(" Y=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(Ycartesienne_3D(rayon,v,u))) ) ); CAL2(Prin2(Cara(chain_Aconcaten4(" Z=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(Zcartesienne_3D(rayon,v,u))) ) ); /* Et enfin, edition du triplet {X,Y,Z}. Ceci a ete introduit le 20131023155709 afin */ /* d'etre compatible avec 'v $xrv/optimise.01$K'... */ Eblock ATes Bblock Test(IL_FAUT(etre_compatible_en_rho_phi_theta)) /* Test introduit le 20131023163020... */ Bblock CAL2(Prin2(Cara(chain_Aconcaten4(" rho=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(rayon)) ) ); CAL2(Prin2(Cara(chain_Aconcaten4(" phi=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(v)) ) ); CAL2(Prin2(Cara(chain_Aconcaten4(" theta=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(u)) ) ); /* Et enfin, edition du triplet {rho,phi,theta} (introduit le 20131023163020). */ CAL2(Prin0(" ")); /* Introduit le 20131029092507 pour simplifier 'v $xiirs/.PSPH.85.1.$U'... */ Eblock ATes Bblock CAL2(Prin2(Cara(chain_Aconcaten4(" u=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(u)) ) ); CAL2(Prin2(Cara(chain_Aconcaten4(" v=%",valeurs_signees,".*",format_d_edition)) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(v)) ) ); /* Et enfin, edition du couple {u,v} (soit {latitude,longitude} ou encore {theta,phi}). */ Eblock ETes Eblock ETes CAL2(Prin0("\n")); Eblock EDoI Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande