/*************************************************************************************************************************************/
/* */
/* T A B L E D E M U L T I P L I C A T I O N D E S Q U A T E R N I O N S : */
/* */
/* */
/* Author of '$xtKg/quaternions$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 : */
/* */
/*************************************************************************************************************************************/
@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 TEST(q1,q2) \
IFET(IFEQ(HReelle(q1),HReelle(q2)) \
,IFET(IFEQ(HImaginaire(q1),HImaginaire(q2)) \
,IFET(IFEQ(HJmaginaire(q1),HJmaginaire(q2)) \
,IFET(IFEQ(HKmaginaire(q1),HKmaginaire(q2)) \
,TOUJOURS_VRAI \
) \
) \
) \
)
#define ANTI_TEST(q1,q2) \
IFET(IFEQ(HReelle(q1),NEGA(HReelle(q2))) \
,IFET(IFEQ(HImaginaire(q1),NEGA(HImaginaire(q2))) \
,IFET(IFEQ(HJmaginaire(q1),NEGA(HJmaginaire(q2))) \
,IFET(IFEQ(HKmaginaire(q1),NEGA(HKmaginaire(q2))) \
,TOUJOURS_VRAI \
) \
) \
) \
)
#define TEST_BASE(q,q1) \
Bblock \
Test(TEST(q,base`q1)) \
Bblock \
CAL2(Prin0("+q1")); \
/* Le 20050316121604, le signe "+" a ete ajoute (par symetrie avec le signe "-"...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(ANTI_TEST(q,base`q1)) \
Bblock \
CAL2(Prin0("-q1")); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock
#define PRODUIT(q1,q2) \
Bblock \
DEFV(hyper_complexe,q); \
/* Produit : q = q1.q2. */ \
HCinitialisation(q,FZERO,FZERO,FZERO,FZERO); \
/* Par pure hygiene... */ \
aHCproduit(q,base`q1,base`q2); \
/* Calcul du produit... */ \
/* */ \
/* Le 20111220094924 je suis passe de 'HCproduit(...)' a 'aHCproduit(...)' par "symetrie" */ \
/* avec 'v $xtKg/octonions$K 20111220094553'... */ \
CAL2(Prin0("q1.q2 = ")); \
TEST_BASE(q,1); \
TEST_BASE(q,i); \
TEST_BASE(q,j); \
TEST_BASE(q,k); \
CAL2(Prin0("\n")); \
/* Edition d'une entree de la table de multiplication... */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T A B L E D E M U L T I P L I C A T I O N D E S Q U A T E R N I O N S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(hyper_complexe,base_1);
DEFV(hyper_complexe,base_i);
DEFV(hyper_complexe,base_j);
DEFV(hyper_complexe,base_k);
/* Definition de la base (1,i,j,k). */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(VIDE;)
);
HCinitialisation(base_1,FU___,FZERO,FZERO,FZERO);
HCinitialisation(base_i,FZERO,FU___,FZERO,FZERO);
HCinitialisation(base_j,FZERO,FZERO,FU___,FZERO);
HCinitialisation(base_k,FZERO,FZERO,FZERO,FU___);
/* Initialisation de la base (1,i,j,k). */
PRODUIT(1,1);
PRODUIT(1,i);
PRODUIT(1,j);
PRODUIT(1,k);
CAL2(Prin0("\n"));
PRODUIT(i,1);
PRODUIT(i,i);
PRODUIT(i,j);
PRODUIT(i,k);
CAL2(Prin0("\n"));
PRODUIT(j,1);
PRODUIT(j,i);
PRODUIT(j,j);
PRODUIT(j,k);
CAL2(Prin0("\n"));
PRODUIT(k,1);
PRODUIT(k,i);
PRODUIT(k,j);
PRODUIT(k,k);
CAL2(Prin0("\n"));
RETU_Commande;
Eblock
ECommande