/*************************************************************************************************************************************/
/* */
/* R E C H E R C H E D ' U N E R O T A T I O N N E U T R E D A N S L E S Q U A T E R N I O N S : */
/* */
/* */
/* Author of '$xtKg/rotations_HC.02$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20181203133914). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CPP_____MODULE_NON_DERIVABLE
@define PRAGMA_CL_____MODULE_NON_OPTIMISABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 ALPHA_D \
NEGA(PI)
#define ALPHA_A \
NEUT(PI)
#define PHI___D \
NEGA(PI)
#define PHI___A \
NEUT(PI)
#define THETA__D \
NEGA(PI)
#define THETA__A \
NEUT(PI)
#define PAS \
FRA10(FRA10(FU))
#define EPSILON \
GRO3(FRA10(FU))
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define PRINT_HC \
Bblock \
CAL3(Prme3("rotation={%+.^^^,%+.^^^,%+.^^^}",alpha,phi__,theta_)); \
CALS(FPrme0(" ")); \
\
CAL3(Prme4("q1={%+.^^^,%+.^^^,%+.^^^,%+.^^^}",HReelle(q1),HImaginaire(q1),HJmaginaire(q1),HKmaginaire(q1))); \
CALS(FPrme0(" --> ")); \
CAL3(Prme4("q2={%+.^^^,%+.^^^,%+.^^^,%+.^^^}",HReelle(q2),HImaginaire(q2),HJmaginaire(q2),HKmaginaire(q2))); \
CALS(Fsauts_de_lignes(UN)); \
Eblock
/*===================================================================================================================================*/
/* */
/* R E C H E R C H E D ' U N E R O T A T I O N N E U T R E D A N S L E S Q U A T E R N I O N S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Float,INIT(c1,11));
DEFV(Float,INIT(ci,22));
DEFV(Float,INIT(cj,33));
DEFV(Float,INIT(ck,44));
/* Composantes flottantes. */
DEFV(hyper_complexe,q1);
/* Variables complexe et hyper-complexe. */
DEFV(Float,INIT(alpha,PI_SUR_2));
DEFV(Float,INIT(phi__,PI_SUR_2));
DEFV(Float,INIT(theta_,FZERO));
/* Angles initialises sur le cas theorique de la rotation neutre... */
DEFV(Float,INIT(pas,PAS));
DEFV(Float,INIT(epsilon,EPSILON));
/* Arguments d'appel... */
DEFV(hyper_complexe,q2);
/*..............................................................................................................................*/
EGAL(nombre_de_chiffres_des_editions_flottantes,QUATRE);
EGAL(PREMIER_CARACTERE_ITb0(mode_fg_de_FORMAT_FLOT_EDITION),K_f);
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_F("epsilon=",epsilon);
GET_ARGUMENT_F("pas=",pas);
)
);
HCinitialisation(q1,c1,ci,cj,ck);
CALS(FPrme0("Cas theorique :"));
CALS(Fsauts_de_lignes(UN));
HCrotation(q2,q1,PI_SUR_2,PI_SUR_2,FZERO);
PRINT_HC;
CALS(Fsauts_de_lignes(UN));
CALS(Fsauts_de_lignes(UN));
DoIn(alpha,ALPHA_D,ALPHA_A,pas)
Bblock
DoIn(phi__,PHI___D,PHI___A,pas)
Bblock
DoIn(theta_,THETA__D,THETA__A,pas)
Bblock
HCrotation(q2,q1,alpha,phi__,theta_);
Test(I4ET(IFEQ_a_peu_pres_absolu(HReelle(q2),HReelle(q1),epsilon)
,IFEQ_a_peu_pres_absolu(HImaginaire(q2),HImaginaire(q1),epsilon)
,IFEQ_a_peu_pres_absolu(HJmaginaire(q2),HJmaginaire(q1),epsilon)
,IFEQ_a_peu_pres_absolu(HKmaginaire(q2),HKmaginaire(q1),epsilon)
)
)
Bblock
PRINT_HC;
Eblock
ATes
Bblock
Eblock
ETes
Eblock
EDoI
Eblock
EDoI
Eblock
EDoI
RETU_Commande;
Eblock
ECommande