
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S N O M B R E S H Y P E R - C O M P L E X E S */
/* ( O U " Q U A T E R N I O N S " ) : */
/* */
/* */
/* Definition : */
/* */
/* Soit 'C' le corps des nombres Complexes, le corps */
/* 'Q' des nombres Hyper-Complexes (ou "quaternions" de */
/* Hamilton) peut alors se definir par : */
/* */
/* Q = (C.1) + (C.j) */
/* */
/* la conjugaison '-' pouvant se definir par : */
/* */
/* - - */
/* Q = (C.1) - (C.j) */
/* */
/* avec : */
/* */
/* 2 */
/* j = -1 */
/* */
/* i.j = -j.i ('i' definissant 'C', et 'j' definissant 'Q') */
/* */
/* d'ou l'on tire ('1' etant l'element neutre de la multiplication dans 'R' et 'C') : */
/* */
/* Q = (C.1) + (C.j) */
/* Q = (((R.1) + (R.i)).1) + (((R.1) + (R.i)).j) */
/* Q = ((R.1).1) + ((R.i).1) + ((R.1).j) + ((R.i).j) */
/* */
/* | | | | */
/* | | | | */
/* ------- | | | */
/* | | | | */
/* | | | | */
/* 1 = (1).1 <-- | | | */
/* i = (i).1 <------ | | */
/* | | */
/* j = (1).j <------------------ | */
/* k = (i).j <------------------------------ */
/* */
/* d'ou : */
/* */
/* 1 = 1.1 */
/* i = i.1 */
/* */
/* j = 1.j */
/* k = i.j */
/* */
/* | | */
/* | | */
/* | --------> (1,j) definit 'Q' */
/* ----------> (1,i) est la base de 'C' */
/* */
/* */
/* Notation : */
/* */
/* Un nombre hyper-complexe 'q' (ou "quaternion") */
/* est compose d'une partie reelle 'a' et de trois */
/* parties imaginaires 'b', 'c' et 'd' ; on le notera : */
/* */
/* q = (a,b,c,d) */
/* */
/* ou : */
/* */
/* q = (a.1) + (b.i) + (c.j) + (d.k) */
/* */
/* ou : */
/* */
/* q = a + b.i + c.j + d.k */
/* */
/* avec : */
/* */
/* 2 2 2 */
/* i = j = k = -1 */
/* */
/* i.j = k = -j.i */
/* j.k = i = -k.j */
/* k.i = j = -i.k */
/* */
/* */
/* on a donc la table de multiplication (v1.v2) : */
/* */
/* */
/* + | | | | | */
/* | | | | | */
/* + v1 | +1 | +i | +j | +k | */
/* | | | | | */
/* + | | | | | */
/* v2 | | | | | */
/* +| | | | | */
/* -------------+-------------------| */
/* +1 | +1 +i | +j +k | */
/* -------------| * | * | */
/* +i | +i -1 | -k +j | */
/* -------------|----+----+----+----| */
/* +j | +j +k | -1 -i | */
/* -------------| * | * | */
/* +k | +k -j | +i -1 | */
/* --------------------------------- */
/* */
/* */
/* (ce resultat a ete obtenu grace au programme 'v $xtKg/quaternions$K') */
/* */
/* */
/* Le produit de deux quaternions 'q1' et 'q2' se definit par : */
/* */
/* q1 = z11.1 + z12.j */
/* q2 = z21.1 + z22.j */
/* */
/* (ou 'z11', 'z12', 'z21' et 'z22' sont quatre nombres complexes) */
/* */
/* q1.q2 = (z11.1 + z12.j).(z21.1 + z22.j) */
/* */
/* --- --- */
/* q1.q2 = (z11.z21 - z22.z12).1 + (z22.z11 + z12.z21).j */
/* */
/* La multiplication n'est pas commutative... */
/* */
/* */
/* Une autre definition peut etre donnee, en rappelant le */
/* produit de deux nombres complexes 'z1' et 'z2' : */
/* */
/* z1 = (a,b) */
/* z2 = (c,d) */
/* */
/* (ou 'a', 'b', 'c' et 'd' sont quatre nombres reels) */
/* */
/* on a : */
/* */
/* z1.z2 = (a,b)(c,d) = (ac - bd , ad + bc) */
/* */
/* ecrivons alors les deux quaternions 'q1' et 'q2' sous la forme : */
/* */
/* --> */
/* q1 = (a, B ) */
/* */
/* --> */
/* q2 = (c, D ) */
/* */
/* --> --> */
/* (ou 'a' et 'c' sont deux nombres reels, alors que ' B ' et ' D ' sont deux 3-vecteurs) */
/* */
/* Le produit de 'q1' et 'q2' sera defini par : */
/* */
/* --> --> --> --> --> --> --> --> */
/* q1.q2 = (a, B )(c, D ) = (ac - B . D , a D + B c + B /\ D ) */
/* */
/* --> --> */
/* ou est donc ajoute le produit vectoriel ' B /\ D '. */
/* */
/* ---> */
/* Une application de cela ; soit donc ' \/ ' l'operateur */
/* 'del' defini par : */
/* */
/* ---> d d d */
/* \/ = ---- + ---- + ---- */
/* dx dy dz */
/* */
/* on a alors : */
/* */
/* --> */
/* d ---> --> dc ---> --> d D ---> ---> --> */
/* (----, \/ )(c, D ) = (---- - \/ . D , ------ + \/ c + \/ /\ D ) */
/* dt dt dt */
/* */
/* --->--> --> ---> ---> --> --> */
/* ou ' \/ D ' est la divergence de ' D ', ' \/ c' le gradient de 'c' et ' \/ /\ D ' le rotationnel de ' D '). */
/* */
/* */
/* Remarque : */
/* */
/* Le corps des quaternions 'q' */
/* defini par : */
/* */
/* q = a.1 + b.i + c.j + d.k */
/* */
/* est isomorphe a l'ensemble des matrices */
/* du type : */
/* */
/* | +z +z | */
/* | 1 2 | */
/* | _ _ | */
/* | -z +z | */
/* | 2 1 | */
/* */
/* ou 'z1' et 'z2' sont les deux nombres Complexes : */
/* */
/* z = a.1 + b.i */
/* 1 */
/* */
/* z = c.1 + d.i */
/* 2 */
/* */
/* en notant que : */
/* */
/* q = z .1 + z .j */
/* 1 2 */
/* */
/* */
/*************************************************************************************************************************************/
/* */ /* q R(q) */ /* e = e .[cos(|I(q)|) + sinc(|I(q)|).I(q)] */ /* */ /* En effet : */ /* */ /* q = R(q) + I(q) */ /* q = a + b.i + c.j + d.k */ /* */ /* I = b.i + c.j + d.k [I = I(q)] */ /* */ /* q = a + I */ /* */ /* 2 2 2 2 2 2 */ /* I = -b -c -d = -|I| = -m [m = |I|] */ /* */ /* 3 2 */ /* I = -m .I */ /* */ /* 4 4 */ /* I = +m */ /* */ /* 5 4 */ /* I = +m .I */ /* */ /* (...) */ /* */ /* q a I a.i c.j d.k */ /* e = e .e (et non pas : e .e .e ) */ /* */ /* I 1 1 1 2 1 3 1 4 1 5 */ /* e = 1 + ----.I + ----.I + ----.I + ----.I + ----.I + (...) */ /* 1! 2! 3! 4! 5! */ /* */ /* I 1 1 1 2 1 2 1 4 1 4 */ /* e = 1 + ----.I + ----.(-m ) + ----.(-m ).I) + ----.(+m ) + ----.(+m .I) + (...) */ /* 1! 2! 3! 4! 5! */ /* */ /* I 1 2 1 4 1 1 2 */ /* e = 1 - ----.m + ----.m + (...) + I.[---- - ----.m + (...)] */ /* 2! 4! 1! 3! */ /* */ /* I 1 2 1 4 I 1 1 1 3 */ /* e = 1 - ----.m + ----.m + (...) + ---.[----.m - ----.m + (...)] */ /* 2! 4! m 1! 3! */ /* */ /* I I */ /* e = cos(m) + ---.sin(m) */ /* m */ /* */ /* I */ /* e = cos(m) + sinc(m).I */ /* */ /* q a */ /* e = e .[cos(m) + sinc(m).I] [sinc(...) = sinus cardinal] */ /* */
/* */
/* 1 |R(q)| */
/* log(q) = {log(|q|,--------.acos(--------).I(q)} */
/* |I(q)| |q| */
/* */
/* */ /* cos(q) = [cos(R(q)).ch(|I(q)|)] - [sin(R(q)).shc(|I(q)|).I(q)] */ /* sin(q) = [sin(R(q)).ch(|I(q)|)] + [cos(R(q)).shc(|I(q)|).I(q)] */ /* */ /* ch(q) = [ch(R(q)).cos(|I(q)|)] + [sh(R(q)).sinc(|I(q)|).I(q)] */ /* sh(q) = [sh(R(q)).cos(|I(q)|)] + [ch(R(q)).sinc(|I(q)|).I(q)] */ /* */ /* en faisant les hypotheses audacieuses suivantes : */ /* */ /* q = R(q) + I(q) */ /* q = a + b.i + c.j + d.k */ /* */ /* I = b.i + c.j + d.k [I = I(q)] */ /* [m = |I|] */ /* */ /* q = a + I */ /* */ /* f11 f12 f21 f22 */ /* */ /* cos(q) = cos(a+I) = [cos(a).cos(I) - sin(a).sin(I)] */ /* sin(q) = cos(a+I) = [sin(a).cos(I) + cos(a).sin(I)] */ /* */ /* ch(q) = ch(a+I) = [ch(a).ch(I) + sh(a).sh(I)] */ /* sh(q) = sh(a+I) = [sh(a).ch(I) + ch(a).sh(I)] */ /* */ /* En effet, par des developpements en series tel celui de 'FgHCexponentielle(...)', on */ /* montre facilement que : */ /* */ /* cos(I) = ch(m) */ /* */ /* sh(m) */ /* sin(I) = -------.I = shc(m).I */ /* m */ /* */ /* */ /* ch(I) = cos(m) */ /* */ /* sin(m) */ /* sh(I) = --------.I = sinc(m).I */ /* m */ /* */ /* d'ou : */ /* */ /* f11 f12 f21 f22 */ /* */ /* cos(q) = cos(a+I) = [cos(a).ch(m) - sin(a).shc(m).I] */ /* sin(q) = cos(a+I) = [sin(a).ch(m) + cos(a).shc(m).I] */ /* */ /* ch(q) = ch(a+I) = [ch(a).cos(m) + sh(a).sinc(m).I] */ /* sh(q) = sh(a+I) = [sh(a).cos(m) + ch(a).sinc(m).I] */ /* */ /* */ /* On verifie aisement que : */ /* */ /* 2 2 2 2 2 */ /* cos (q) + sin (q) = ch (m) + shc (m).I */ /* */ /* 2 */ /* 2 sh (m) 2 2 2 */ /* = ch (m) + --------.I [I = -(m )] */ /* 2 */ /* m */ /* */ /* 2 2 */ /* = ch (m) - sh (m) */ /* ['m' etant un Reel...] */ /* = 1 */ /* */ /* de meme : */ /* */ /* 2 2 */ /* ch (q) - sh (q) = 1 */ /* */