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