_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E S E N S E M B L E S " I T E R A T I F S " D A N S L E P L A N C O M P L E X E , */
/* D A N S L E C O R P S D E S Q U A T E R N I O N S ( O U " H Y P E R - C O M P L E X E " ) , */
/* E T D A N S L E C O R P S D E S O C T O N I O N S ( O U " H Y P E R - H Y P E R - C O M P L E X E " ) : */
/* */
/* */
/* Nota : */
/* */
/* Lorsqu'un parametre peut prendre deux */
/* valeurs 'M' et 'J' suivant que l'on */
/* calcule l'ensemble de Mandelbrot ou un */
/* ensemble de Julia, on le note : */
/* */
/* (M,J), avec */
/* */
/* donc dans l'ordre Mandelbrot, puis Julia... */
/* */
/* */
/* Author of '$ximcf/iterations$FON' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N T R O L E D E L ' A R I T H M E T I Q U E E T E N D U E */
/* L O R S D E C A L C U L S S U R L E S N O M B R E S C O M P L E X E S : */
/* */
/*************************************************************************************************************************************/
#ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES));
/* Indicateur introduit le 20070129121923... */
#Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_COMPLEXES));
/* Indicateur introduit le 20070129133050... */
#Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H O I X E N T R E V I S U A L I S E R L E N O M B R E D ' I T E R A T I O N S */
/* O U L ' A P P A R T E N A N C E A L ' E N S E M B L E : */
/* */
/*************************************************************************************************************************************/
#define APPARTENANCE_A_L_ENSEMBLE \
BLANC
#define NON_APPARTENANCE_A_L_ENSEMBLE \
NOIR
#define fAPPARTENANCE_A_L_ENSEMBLE \
FU
#define fNON_APPARTENANCE_A_L_ENSEMBLE \
FZERO
/* Codes de l'appartenance et de la non appartenance (introduits le 20091119165650). */
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations,FAUX)));
/* Introduit le 20091119140032 afin de pouvoir visualiser la non appartenance ('NOIR') et */
/* l'appartenance ('BLANC') plutot que le nombre d'iterations... */
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations,VRAI)));
/* Introduit le 20150126131332 afin de pouvoir ne pas renormaliser le nombre courant */
/* d'iterations et ainsi de visualiser sa "vraie" valeur... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H O I X E N T R E A R G U M E N T [ S ] E T M O D U L E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments,FAUX)));
DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments
,COORDONNEE_BARYCENTRIQUE_MINIMALE
)
)
);
DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments
,COORDONNEE_BARYCENTRIQUE_MAXIMALE
)
)
);
/* Lorsque c'est une valeur de type angulaire (argument[s]) qui doit etre memorisee, cet */
/* indicateur permet de memoriser plutot le module (introduite le 20061218125816). */
/* */
/* Rappelons bien le 20061219121238 que le renvoi du module ne peut se faire qu'en */
/* activant la visualisation de[s] argument[s] de sortie. Ainsi, par exemple avec la */
/* commande 'v $xrc/mandel.01$K', il faudra utiliser les arguments suivants : */
/* */
/* arguments=VRAI */
/* */
/* qui demande la visualisation de l'argument de sortie, ainsi que de plus : */
/* */
/* etendre_precision=VRAI */
/* argument=FAUX (ou son "complement" : module=VRAI) */
/* */
/* pour remplace la sortie de l'argument de sortie par celle su module... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E X T E N S I O N D E L A P R E C I S I O N D E S R E S U L T A T S : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____etendre_la_precision,FAUX)));
/* Possibilite introduite le 20061218125816 qui permet, si besoin est, de renvoyer des */
/* resultats de type 'genere_Float' (au lieu de 'genere_p')... */
#pragma xcc__cpp_Z__liste_utiles $ximcf/iterations$EXT iterations_dans_C_HC_HHC_____IFmageR $xbmcf/iterations
DEFV(Common,DEFV(Statique,DEFV(imageF,iterations_dans_C_HC_HHC_____IFmageR)));
/* Image statique de type 'genere_Float' contenant, si besoin est, la version de l'image */
/* Resultat en precision "etendue". On notera que cette facon de proceder n'est pas tres */
/* "propre" ; en effet, il aurait ete plus elegant soit de dupliquer toutes les fonctions */
/* afin qu'elles renvoie d'un cote des images de type 'image' et de l'autre des images de */
/* type 'imageF'. Mais cela aurait implique un travail enorme et risque. Il aurait peut-etre */
/* aussi ete possible de faire que les fonctions puissent etre en quelque sorte de deux */
/* types differents simultanement ; mais cela aurait ete contraire aux grands principes. */
/* Cette solution consistant donc d'une part a continuer a renvoyer systematiquement une */
/* image de type 'image' (quitte a ne pas la memoriser en retour) et d'autre part a renvoyer */
/* eventuellement, via une image 'Common', une version de type 'imageF' fut donc beaucoup */
/* simple a implementer : tant pis pour l'elegance... */
#define INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC \
Bblock \
Test(IL_FAUT(iterations_dans_C_HC_HHC_____etendre_la_precision)) \
Bblock \
CALS(IFinitialisation(iterations_dans_C_HC_HHC_____IFmageR,FZERO)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation eventuelle du processus d'extension de la precision (introduite le */ \
/* 20061219090342). */
#define RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC \
Bblock \
Test(IL_FAUT(iterations_dans_C_HC_HHC_____etendre_la_precision)) \
Bblock \
storeF_point(niveau_courant_precis,iterations_dans_C_HC_HHC_____IFmageR,X,Y); \
/* Marquage eventuel du point courant de facon precise... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
store_point(niveau_courant,imageR,X,Y,FVARIABLE); \
\
EGAL(niveau_courant_maximal,MAX2(niveau_courant,niveau_courant_maximal)); \
/* Introduit le 20200627112145 a cause d'une remarque faite a cette date concernant le */ \
/* marquage des racines N-iemes de l'unite calculee exactement... */ \
Eblock \
/* Marquage du point courant (procedure introduite le 20061218125816). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L I D A T I O N D E L A F E N E T R E D E C A L C U L D E M A N D E E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_avant_et_apres_homothetie,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_sous_forme_OX_EX_OY_EY,VRAI)));
/* Introduit le 20091122134759 afin de pouvoir editer la fenetre courante avant et apres */
/* homothetie, puis complete le 20110115102345 afin de pouvoir choisir entre deux formats */
/* {"OX=","EX=","OY=","EY="} (par defaut) et {"xbg=","ybg=","xhd=","yhd="} (pour simplifier */
/* l'exploitation de ces editions...). */
#define VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE \
Bblock \
Test(IFLE(Reelle(INDIRECT(coin_haut_droite)),Reelle(INDIRECT(coin_bas_gauche)))) \
Bblock \
PRINT_ERREUR("la relation d'ordre entre les abscisses de la fenetre est incorrecte, ou elles sont egales"); \
PRINT_ERREUR("de toute facon, elles sont permutees"); \
fSWAP(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite))); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFLE(Imaginaire(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_bas_gauche)))) \
Bblock \
PRINT_ERREUR("la relation d'ordre entre les abscisses de la fenetre est incorrecte, ou elles sont egales"); \
PRINT_ERREUR("de toute facon, elles sont permutees"); \
fSWAP(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite))); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_avant_et_apres_homothetie)) \
Bblock \
Test(IL_FAUT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_sous_forme_OX_EX_OY_EY)) \
/* Le 20110115102345 fut introduit le choix entre le format {"OX=","EX=","OY=","EY="} */ \
/* (par defaut) et le format {"xbg=","ybg=","xhd=","yhd="} (pour simplifier l'exploitation */ \
/* de ces editions...). */ \
Bblock \
CAL3(Prme4("{{%+.^^^,%+.^^^},{%+.^^^,%+.^^^}}" \
,Reelle(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_bas_gauche)) \
,Reelle(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_haut_droite)) \
) \
); \
CALS(FPrme0(" --> ")); \
CAL3(Prme4("{{%+.^^^,%+.^^^},{%+.^^^,%+.^^^}}" \
,X_COIN_BAS_GAUCHE,Y_COIN_BAS_GAUCHE \
,X_COIN_HAUT_DROITE,Y_COIN_HAUT_DROITE \
) \
); \
CALS(FPrme0(" == ")); \
CAL3(Prme4("{OX=%+.^^^ EX=%+.^^^ OY=%+.^^^ EY=%+.^^^}" \
,X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE \
,Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE \
) \
); \
CALS(FPrme0(" == ")); \
CAL3(Prme4("[%+.^^^,%+.^^^]x[%+.^^^,%+.^^^]" \
,X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE \
,Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE \
) \
); \
/* Ces editions ont ete introduites le 20091122134759 pour aider a la determination des */ \
/* "bonnes" fenetres de calcul (c'est-a-dire la ou il se passe quelque chose...). */ \
/* */ \
/* Le 20091123094717 on notera le lien avec 'v $xiidX/fonct$vv$FON 20091123093212' qui */ \
/* permet de connaitre les coordonnees normalisees dans un certain espace des points d'une */ \
/* image. */ \
/* */ \
/* Le 20091123101627, j'ai complete le format : */ \
/* */ \
/* "{{%+.^^g,%+.^^g},{%+.^^g,%+.^^g}}" */ \
/* */ \
/* par quelque chose de compatible avec 'v $xci/display$K 20091123094324' et on aura alors */ \
/* fortement interet a utiliser simultanement les options : */ \
/* */ \
/* ModeFlot='f' */ \
/* ChiffresFlot=... */ \
/* */ \
/* avec conjointement : */ \
/* */ \
/* editer_XY_curseur=VRAI */ \
/* normaliser_XY_curseur=VRAI */ \
/* */ \
/* afin de reduire la precision (16 par defaut...) et de garantir le nombre de decimales. */ \
/* */ \
/* Le 20091123120321, les formats "^^g" sont passes a "^^^" pour plus de souplesse... */ \
/* */ \
/* Le 20151014145152, j'ai ajoute une edition supplementaire de la forme : [OX,EX]x[OYxEY]. */ \
Eblock \
ATes \
Bblock \
CAL3(Prme4("AvantHomothetie='xbg=%+.^^^ ybg=%+.^^^ xhd=%+.^^^ yhd=%+.^^^'" \
,Reelle(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_bas_gauche)) \
,Reelle(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_haut_droite)) \
) \
); \
CALS(FPrme0(" --> ")); \
CAL3(Prme4("ApresHomothetie='xbg=%+.^^^ ybg=%+.^^^ xhd=%+.^^^ yhd=%+.^^^'" \
,X_COIN_BAS_GAUCHE,Y_COIN_BAS_GAUCHE \
,X_COIN_HAUT_DROITE,Y_COIN_HAUT_DROITE \
) \
); \
Eblock \
/* Le 20110117132135, les couples "{...}" ont ete remplaces par des couples "'...'" plus */ \
/* faciles a gerer au niveau du '$CSH' ('v $xiirc/.MANE.B1.1.$U AvantHomothetie'). */ \
ETes \
\
CALS(Fsauts_de_lignes(UN)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Validation et remise en ordre eventuelle de la fenetre de calcul demandee avant son */ \
/* eventuelle extension homothetique... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A S S A G E D E S C O O R D O N N E E S D E L ' I M A G E */
/* A U X C O O R D O N N E E S D U P L A N : */
/* */
/*************************************************************************************************************************************/
#define X_COIN_BAS_GAUCHE \
CHANGEMENT_HOMOTHETIQUE_D_ABSCISSE_GAUCHE(Reelle(INDIRECT(coin_bas_gauche)) \
,Reelle(INDIRECT(coin_haut_droite)) \
)
#define Y_COIN_BAS_GAUCHE \
CHANGEMENT_HOMOTHETIQUE_D_ORDONNEE_BAS(Imaginaire(INDIRECT(coin_bas_gauche)) \
,Imaginaire(INDIRECT(coin_haut_droite)) \
)
#define X_COIN_HAUT_DROITE \
CHANGEMENT_HOMOTHETIQUE_D_ABSCISSE_DROITE(Reelle(INDIRECT(coin_bas_gauche)) \
,Reelle(INDIRECT(coin_haut_droite)) \
)
#define Y_COIN_HAUT_DROITE \
CHANGEMENT_HOMOTHETIQUE_D_ORDONNEE_HAUT(Imaginaire(INDIRECT(coin_bas_gauche)) \
,Imaginaire(INDIRECT(coin_haut_droite)) \
)
/* Definition des coins "bas-gauche" et "haut-droite" de la fenetre en fonction du rapport */
/* des dimensions de cette derniere ; on notera que si celle-ci n'est pas carree, ce sont */
/* ses abscisses dans le plan Complexe qui sont re-ajustees afin de s'accomoder du rapport */
/* suivant : */
/* */
/* dimX */
/* ------ */
/* dimY */
/* */
/* de la facon suivante (en supposant ce rapport egal a 2) : */
/* */
/* ----------------- */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* ----------------- */
/* . . */
/* . . */
/* . . */
/* . . */
/* . . */
/* . . */
/* --------------------------------- */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* | . | */
/* --------------------------------- */
/* . */
/* /|\ */
/* | */
/* | */
/* */
/* milieu de la fenetre */
/* */
/* Les ordonnees sont conservees, et seules les abscisses sont modifiees par rapport au */
/* milieu de la fenetre... */
#define X_IMAGE_PLAN(x) \
ADD2(MUL2(FLOT(COXR(x)),x_homothetie) \
,X_COIN_BAS_GAUCHE \
)
#define Y_IMAGE_PLAN(y) \
ADD2(MUL2(FLOT(COYR(y)),y_homothetie) \
,Y_COIN_BAS_GAUCHE \
)
/* Passage des coordonnees dans l'image aux coordonnees du plan. */
#define X_PLAN_IMAGE \
COXA(INTE(DIVI(SOUS(Reelle(suite_point),X_COIN_BAS_GAUCHE) \
,x_homothetie \
) \
) \
)
#define Y_PLAN_IMAGE \
COYA(INTE(DIVI(SOUS(Imaginaire(suite_point),Y_COIN_BAS_GAUCHE) \
,y_homothetie \
) \
) \
)
/* Passage des coordonnees du plan aux coordonnees dans l'image. */
#define X_PLAN_IMAGE_MODULO \
MODU(X_PLAN_IMAGE \
,Xmin \
,Xmax \
)
#define Y_PLAN_IMAGE_MODULO \
MODU(Y_PLAN_IMAGE \
,Ymin \
,Ymax \
)
/* Passage des coordonnees du plan aux coordonnees dans l'image "torique" ; */
/* on notera les 'MODU', qui font que ce l'on calcule peut etre bizarre... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A R I A B L E S N E C E S S A I R E S A U C A L C U L D E L A F E N E T R E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(HOMOTHETIE__IMAGE__C_HC_HHC______prendre_en_compte_le_rapport_dimX_dimY,VRAI)));
/* Introduit le 20120123135858 afin de svaoir si le rapport dimX/dimY doit aussi etre celui */
/* de la fenetre ('VRAI', ce qui assure la compatibilite anterieure) ou bien conserve tel */
/* quel ('FAUX')... */
DEFV(Common,DEFV(Logical,ZINT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY,VRAI)));
/* Introduit le 20120123125558 afin de choisir le calcul de {x_homothetie,y_homothetie} */
/* via {dimX,dimY} ('VRAI', ce qui assure la compatibilite anterieure) ou bien via */
/* {Xmax,Ymax} ('FAUX'). */
#define VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE \
gVARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE \
(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______prendre_en_compte_le_rapport_dimX_dimY) \
,COND(IFEQ_a_peu_pres_absolu(DIVI(FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY) \
,dimX \
,Xmax \
) \
) \
,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY) \
,dimY \
,Ymax \
) \
) \
) \
,DIVI(SOUS(X_COIN_HAUT_DROITE,X_COIN_BAS_GAUCHE) \
,SOUS(Y_COIN_HAUT_DROITE,Y_COIN_BAS_GAUCHE) \
) \
,tgEPSILON \
) \
,FAUX \
,VRAI \
) \
,FAUX \
) \
); \
/* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il */ \
/* necessaire (introduit le 20091124124351) ? */
#define BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* Definition des variables communes a tout ce qui necessite des homotheties... */ \
VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE; \
/* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il */ \
/* necessaire (introduit le 20091124124351) ? */ \
\
DEFV(Float \
,INIT(x_homothetie \
,DIVI(SOUS(X_COIN_HAUT_DROITE \
,X_COIN_BAS_GAUCHE \
) \
,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY),dimX,Xmax)) \
) \
) \
); \
/* "Taille" reelle de la fenetre rapportee a la taille des images, */ \
/* */ \
/* ATTENTION, le 20000316182616 je suis passe de 'dimX' a 'dimXN'. */ \
/* */ \
/* ATTENTION, le 20091124122443, suite a 'v $xiiD/definit.1$DEF 20090928173316', je suis */ \
/* repasse de 'dimXN' a 'dimX'... */ \
DEFV(Float \
,INIT(y_homothetie \
,DIVI(SOUS(Y_COIN_HAUT_DROITE \
,Y_COIN_BAS_GAUCHE \
) \
,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY),dimY,Ymax)) \
) \
) \
); \
/* "Taille" imaginaire de la fenetre rapportee a la taille des images. */ \
/* */ \
/* ATTENTION, le 20000316182616 je suis passe de 'dimY' a 'dimYN'. */ \
/* */ \
/* ATTENTION, le 20091124122443, suite a 'v $xiiD/definit.1$DEF 20090928173316', je suis */ \
/* repasse de 'dimYN' a 'dimY'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A S O U L ' E X P O S A N T N ' E S T A P R I O R I P A S U T I L E : */
/* */
/*************************************************************************************************************************************/
#define EXPOSANT_INUTILE \
DEUX \
/* Introduit le 20111130180327, il doit valoir 'DEUX' malgre tout (et non pas la valeur */ \
/* 'ARGUMENT_INUTILE' utilise anterieurement) a cause des tests qui sont faits en liaison */ \
/* avec 'compatibilite_20110825'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T E S T S U R L E N O M B R E D ' I T E R A T I O N S : */
/* */
/*************************************************************************************************************************************/
#define PAS_ASSEZ_D_ITERATIONS \
IFLT(nombre_courant_d_iterations,nombre_maximal_d_iterations) \
/* Test sur le nombre d'iterations. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S E U I L D U M O D U L E : */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define TEST_DU_CARRE_DU_MODULE_DANS_C(seuil) \
IFLT(Cmodule2(suite_point),seuil) \
/* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_C(...)'. */
#define SEUIL_MODULE_DANS_C \
EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_C_____seuil_du_carre_du_module
,SEUIL_MODULE_DANS_C
)
)
);
/* Seuil de divergence du carre du module d'un nombre complexe de la suite. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E P L I E M E N T E V E N T U E L D E S E S P A C E S : */
/* */
/*************************************************************************************************************************************/
#define ITERATIONS_DIVERSES_____REPLIER_L_ESPACE \
FAUX
#define ITERATIONS_DIVERSES_____ORIGINE__ \
NEGA(COORDONNEE_BARYCENTRIQUE_MAXIMALE)
#define ITERATIONS_DIVERSES_____EXTREMITE \
NEUT(COORDONNEE_BARYCENTRIQUE_MAXIMALE)
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E P L I E M E N T E V E N T U E L D E L ' E S P A C E C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
/* Possibilite introduite le 20121103095740... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T R A I T E M E N T D E L ' U N D E R F L O W E T D E L ' O V E R F L O W : */
/* */
/*************************************************************************************************************************************/
#define TESTER_L_UNDERFLOW_ET_L_OVERFLOW \
VRAI
#define NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW \
NOTL(TESTER_L_UNDERFLOW_ET_L_OVERFLOW)
/* Afin de pouvoir activer ou desactiver respectivement les tests d'undeflow et d'overflow, */
/* lorsque cela s'avere necessaire... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* Q U E L Q U E S D O N N E E S C O M M U N E S A U C A L C U L */
/* D A N S L E P L A N C O M P L E X E */
/* E T D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC \
DEFV(Positive,INIT(nombre_courant_d_iterations,UNDEF)); \
/* Nombre courant d'iterations. */ \
DEFV(genere_p,INIT(niveau_courant,NIVEAU_UNDEF)); \
/* Niveau de marquage du point courant. */ \
DEFV(genere_p,INIT(niveau_courant_maximal,NOIR)); \
/* Niveau maximal de marquage rencontre lors des iterations : cela a ete introduit le */ \
/* 20200627112145 a cause d'une remarque faite a cette date concernant le marquage des */ \
/* racines N-iemes de l'unite calculee exactement... */ \
DEFV(genere_Float,INIT(niveau_courant_precis,FLOT__NIVEAU_UNDEF)) \
/* Niveau courant de 'iterations_dans_C_HC_HHC_____IFmageR'. */ \
/* */ \
/* ATTENTION : l'absence de ";" a la fin de la derniere declaration est due au mode d'appel */ \
/* qui lui se termine par un ";"... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* Q U E L Q U E S D O N N E E S U T I L E S A L ' E D I T I O N E V E N T U E L L L E */
/* D E S T R A J E C T O I R E S D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____editer_les_trajectoires,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires,VRAI)));
#define Xmin_Ymin__UNDEF \
MOINS_L_INFINI
#define Xmax_Ymax__UNDEF \
INFINI
/* Introduit le 20211013094654 et dedouble le 20211016080133... */
#define IGNORER__Xmin__Ymin \
FRA10(FRA10(Xmin_Ymin__UNDEF))
#define IGNORER__Xmax__Ymax \
FRA10(FRA10(Xmax_Ymax__UNDEF))
/* Les 'FRA10(FRA10(....))'s sont destines a permettre des 'ADD2(...)' ci-apres en ce */
/* concerne {{Xmin,Xmax},{Ymin,Ymax}}... */
/* */
/* Le 20211016080133 un lien a ete etabli entre {IGNORER__Xmin__Ymin,Xmax_Ymax__UNDEF} */
/* et {Xmin_Ymin__UNDEF,Xmax_Ymax__UNDEF} et ce afin de ne pas rencontrer un jour un */
/* probleme de parametrage incoherent... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____compatibilite_20211015,FAUX)));
/* Introduit le 20211015103315 car, en effet, avant cette date {{Xmin,Xmax},{Ymin,Ymax}} */
/* n'etaient pas pris en compte... */
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____translation_X_d_editions_des_trajectoires,FZERO)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____maille_X_d_editions_des_trajectoires,GRO10(PasX))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____translation_Y_d_editions_des_trajectoires,FZERO)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____maille_Y_d_editions_des_trajectoires,GRO10(PasY))));
/* Le 20211012122652 a ete introduite la possibilite de "resserer" le maillage des points */
/* dont on visualise les trajectoires et ce, par exemple, au centre du domaine... */
/* */
/* Je rappelle le 20211014121814 qu'il n'est pas possible de definir : */
/* */
/* DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmin__...,Xmin))); */
/* DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmax__...,Xmax))); */
/* */
/* DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymin__...,Ymin))); */
/* DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymax__...,Ymax))); */
/* */
/* car, en effet, {{Xmin,Xmax},{Ymin,Ymax}} sont en general des parametres d'appel des */
/* '$X's et ne sont donc pas connus au moment de leur lancement, d'ou le passage par */
/* {Xmin_Ymin__UNDEF,Xmax_Ymax__UNDEF} qui indiquent que l'initilisation de ces quatre */
/* variables n'a pas encore ete faite... */
DEFV(Local,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,LUNDEF)));
/* Introduit le 20211012180614 pour simplifier les choses... */
DEFV(Local,DEFV(Positive,ZINT(gF_ITERATION_DANS_C_____numero_du_point_courant_edite,ZERO)));
/* Introduit le 20190314180029 pour permettre l'edition des trajectoires {Z(0),Z(1),...}. */
/* */
/* Le 20190315093924, les mailles {X,Y} sont passees de 'Int' a 'Float' afin d'en faire */
/* des arguments "homothetiques"... */
#define gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES(MarqueurIteration) \
/* L'argument 'MarqueurIteration' a ete introduit le 20190315144242 afin de pouvoir faire */ \
/* la difference entre le premier et le second appel... */ \
Bblock \
Test(IL_FAUT(gF_ITERATION_DANS_C_____editer_les_trajectoires)) \
/* Test introduit le 20190314180029... */ \
Bblock \
DEFV(Int,INIT(coordonnee_X_de_depart_d_une_trajectoire \
,ADD2(X \
,gF_ITERATION_DANS_C_____translation_X_d_editions_des_trajectoires \
) \
) \
); \
DEFV(Int,INIT(coordonnee_Y_de_depart_d_une_trajectoire \
,ADD2(Y \
,gF_ITERATION_DANS_C_____translation_Y_d_editions_des_trajectoires \
) \
) \
); \
\
DEFV(Int,INIT(maille_X_denormalisee \
,_lDENORMALISE_OX(gF_ITERATION_DANS_C_____maille_X_d_editions_des_trajectoires) \
) \
); \
DEFV(Int,INIT(maille_Y_denormalisee \
,_lDENORMALISE_OY(gF_ITERATION_DANS_C_____maille_Y_d_editions_des_trajectoires) \
) \
); \
/* Introduit le 20211013135602... */ \
\
Test(IFOU(IFOU(IFEQ(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF) \
,IFEQ(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF) \
) \
,IFOU(IFEQ(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF) \
,IFEQ(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF) \
) \
) \
) \
Bblock \
/* Cas ou au moins l'un des {{Xmin,Xmax},{Ymin,Ymax}} n'a pas ete initialise... */ \
Test(IL_FAUT(gF_ITERATION_DANS_C_____compatibilite_20211015)) \
/* Test introduit le 20211015103315... */ \
Bblock \
EGAL(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,IGNORER__Xmin__Ymin); \
EGAL(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,IGNORER__Xmax__Ymax); \
EGAL(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,IGNORER__Xmin__Ymin); \
EGAL(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,IGNORER__Xmax__Ymax); \
/* Avec ces valeurs, {{Xmin,Xmax},{Ymin,Ymax}} seront ignorees... */ \
Eblock \
ATes \
Bblock \
EGAL(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires \
,COND(IFEQ(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires \
,Xmin_Ymin__UNDEF \
) \
,Xmin \
,gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires \
) \
); \
EGAL(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires \
,COND(IFEQ(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires \
,Xmax_Ymax__UNDEF \
) \
,Xmax \
,gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires \
) \
); \
\
EGAL(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires \
,COND(IFEQ(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires \
,Xmin_Ymin__UNDEF \
) \
,Ymin \
,gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires \
) \
); \
EGAL(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires \
,COND(IFEQ(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires \
,Xmax_Ymax__UNDEF \
) \
,Ymax \
,gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires \
) \
); \
/* Introduit sous cette forme le 20211013094654... */ \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFET(IFET(DIVISIBLE(coordonnee_X_de_depart_d_une_trajectoire \
,maille_X_denormalisee \
) \
,IFINff(coordonnee_X_de_depart_d_une_trajectoire \
,ADD2(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires \
,maille_X_denormalisee \
) \
,ADD2(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires \
,maille_X_denormalisee \
) \
) \
) \
,IFET(DIVISIBLE(coordonnee_Y_de_depart_d_une_trajectoire \
,maille_Y_denormalisee \
) \
,IFINff(coordonnee_Y_de_depart_d_une_trajectoire \
,ADD2(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires \
,maille_Y_denormalisee \
) \
,ADD2(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires \
,maille_Y_denormalisee \
) \
) \
) \
) \
) \
Bblock \
CAL3(Prme1("point=%d",gF_ITERATION_DANS_C_____numero_du_point_courant_edite)); \
CAL3(Prme2(" iteration=%d%s",nombre_courant_d_iterations,MarqueurIteration)); \
/* On notera le 20190314185753 que la premiere iteration vaudra : */ \
/* */ \
/* 1 --> 'Imandelbrot_dans_C(...)' */ \
/* */ \
/* ce qui est bien, mais : */ \
/* */ \
/* 2 --> 'Ijulia_dans_C(...)' */ \
/* */ \
/* et ce a cause de 'v $ximcf/iterations$FON EGAL.nombre_courant_d_iterations.UN.;' */ \
/* ci-apres... */ \
CAL3(Prme2(" (%+.^^^,%+.^^^)" \
,COND(IL_FAUT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires) \
,NORM(Reelle(suite_point),X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE) \
,Reelle(suite_point) \
) \
,COND(IL_FAUT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires) \
,NORM(Imaginaire(suite_point),Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE) \
,Imaginaire(suite_point) \
) \
) \
); \
\
Test(TOUJOURS_VRAI) \
/* Introduit le 20211013133259 pour des raisons de test... */ \
Bblock \
CAL3(Prme3(" X=%d E [%d,%d]" \
,X \
,gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires \
,gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires \
) \
); \
CAL3(Prme3(" Y=%d E [%d,%d]" \
,Y \
,gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires \
,gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires \
) \
); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
CALS(Fsauts_de_lignes(UN)); \
\
EGAL(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,VRAI); \
Eblock \
ATes \
Bblock \
EGAL(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,FAUX); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Edition eventuelle des trajectoires (introduite le 20190314180029...). */ \
/* */ \
/* On notera que cette edition est appelee deux fois par iteration. On aura alors pour */ \
/* chaque iteration les deux lignes suivantes : */ \
/* */ \
/* point=... iteration=... {Reelle(suite_point),Imaginaire(suite_point)} AVANT */ \
/* point=... iteration=... {Reelle(suite_point),Imaginaire(suite_point)} APRES */ \
/* */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S N E C E S S A I R E S A U C A L C U L E N " F L O T T A N T " */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_ITERATION_DANS_C \
/* Definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(complexe,point_courant); \
/* Point complexe courant 'C' dans la fenetre. */ \
DEFV(complexe,suite_point); \
/* Suite des points complexes Z lors de l'iteration. */ \
/* n */ \
DEFV(complexe,point_manoeuvre); \
/* Point complexe de maneuvre lors de l'iteration. */ \
VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;
#define INITIALISATION_DU_POINT_COURANT_DANS_C \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
Bblock \
Cinitialisation(point_courant,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y)); \
/* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image. */ \
Eblock \
/* Initialisation du point complexe courant sur un maillage {X,Y}. */
DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____epsilon,gEPSILON)));
/* Epsilon utilise via 'TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(...)' lors des iterations... */
#define TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_complexe,epsilon) \
Bblock \
EGAL(Reelle(suite_complexe),TROP_PETIT(Reelle(suite_complexe),epsilon)); \
EGAL(Imaginaire(suite_complexe),TROP_PETIT(Imaginaire(suite_complexe),epsilon)); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des underflows d'une suite complexe... */
#define TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(suite_complexe,anti_epsilon) \
Bblock \
EGAL(Reelle(suite_complexe),TROP_GRAND(Reelle(suite_complexe),anti_epsilon)); \
EGAL(Imaginaire(suite_complexe),TROP_GRAND(Imaginaire(suite_complexe),anti_epsilon)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des overflows d'une suite complexe... */
#define gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES \
Bblock \
CLIR(gF_ITERATION_DANS_C_____numero_du_point_courant_edite); \
Eblock \
/* Introduit le 20190314183222... */
#define gF_ITERATION_DANS_C(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* L'argument 'initialisation_point_courant' a ete introduit le 20091012111043, par exemple */ \
/* pour permettre de definir le "point_courant" autrement que comme etant le point courant */ \
/* {X,Y} sur le maillage de l'image (par exemple via deux matrices d'indirection, une pour */ \
/* chaque coordonnee 'X' et 'Y'). */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
BLOC(initialisation_point_courant); \
/* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image. */ \
\
BLOC(init_iteration); \
/* Initialisation de la suite des nombres complexes sur le "point_courant", soit : */ \
/* */ \
/* Z = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
/* et, initialisation du compteur des iterations. */ \
\
Tant(IFET(test_d_arret \
,PAS_ASSEZ_D_ITERATIONS \
) \
) \
Bblock \
BLOC(calculs_communs); \
\
INCR(nombre_courant_d_iterations,I); \
\
gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES("/1"); \
/* Possibilite introduite le 20190314180029... */ \
\
BLOC(fonc_iteration); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* Z + C */ \
/* n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* Z + A */ \
/* n */ \
/* */ \
/* ou encore autre chose (voir 'GENERE__FonctionP_I_ITERAT_F_C(...)') auquel cas, le */ \
/* calcul precedent de 'point_manoeuvre' peut etre inutile... */ \
\
Test(IL_FAUT(gF_ITERATION_DANS_C_____replier_l_espace)) \
Bblock \
DEFV(complexe,suite_point_manoeuvre); \
\
aCmodulo(suite_point_manoeuvre \
,suite_point \
,gF_ITERATION_DANS_C_____Rorigine__ \
,gF_ITERATION_DANS_C_____Rextremite \
,gF_ITERATION_DANS_C_____Iorigine__ \
,gF_ITERATION_DANS_C_____Iextremite \
); \
/* Repliement eventuel de l'espace introduit le 20121103101108... */ \
\
Cegal(suite_point,suite_point_manoeuvre); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
\
gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES("/2"); \
/* Possibilite introduite le 20190314180029... */ \
Eblock \
ETan \
\
Test(IL_FAUT(visualisation_arguments_de_sortie)) \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments)) \
Bblock \
EGAL(niveau_courant_precis \
,Cargument_2PI(suite_point) \
); \
EGAL(niveau_courant \
,GENP(SCAL(niveau_courant_precis \
,CERCLE_TRIGONOMETRIQUE \
,BLANC \
) \
) \
); \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,Cmodule(suite_point) \
); \
EGAL(niveau_courant \
,GENP(SCAL(TRON(niveau_courant_precis \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,BLANC \
) \
) \
); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
/* Test introduit le 20091119140032... */ \
Bblock \
EGAL(niveau_courant_precis \
,CASP_Float(nombre_courant_d_iterations) \
); \
/* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211. */ \
EGAL(niveau_courant \
,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations) \
,SCAL(nombre_courant_d_iterations \
,nombre_maximal_d_iterations \
,BLANC \
) \
,nombre_courant_d_iterations \
) \
) \
); \
/* Visualisation du nombre d'iterations... */ \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,COND(PAS_ASSEZ_D_ITERATIONS \
,fNON_APPARTENANCE_A_L_ENSEMBLE \
,fAPPARTENANCE_A_L_ENSEMBLE \
) \
); \
EGAL(niveau_courant \
,COND(PAS_ASSEZ_D_ITERATIONS \
,NON_APPARTENANCE_A_L_ENSEMBLE \
,APPARTENANCE_A_L_ENSEMBLE \
) \
); \
/* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC'). Cette */ \
/* possibilite a ete introduite le 20091119140032 afin de faciliter les choses... */ \
Eblock \
ETes \
Eblock \
ETes \
\
RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
/* Et enfin, marquage du point courant. */ \
\
BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
\
Test(IL_FAUT(gF_ITERATION_DANS_C_____editer_les_trajectoires)) \
Bblock \
Test(EST_VRAI(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition)) \
Bblock \
INCR(gF_ITERATION_DANS_C_____numero_du_point_courant_edite,I); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define F_ITERATION_DANS_C(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
gF_ITERATION_DANS_C(test_d_arret \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_C; \
Eblock \
) \
/* Introduit le 20091012111043... */ \
,BLOC(init_iteration); \
,BLOC(Bblock \
aCpuissance(point_manoeuvre,suite_point,exposant); \
/* Calculons : */ \
/* */ \
/* 2 */ \
/* Z */ \
/* n */ \
/* */ \
/* a priori (mais cela peut etre inutile dans certains cas...). */ \
/* */ \
/* Le 20091118113333 : */ \
/* */ \
/* Cproduit(point_manoeuvre,suite_point,suite_point); */ \
/* */ \
/* a ete remplace par : */ \
/* */ \
/* Cpuissance(point_manoeuvre,suite_point,exposant) */ \
/* */ \
/* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite */ \
/* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les */ \
/* calculs), en fait 'DEUX' sera utilise... */ \
Eblock \
) \
,BLOC(fonc_iteration); \
,BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
); \
Eblock
/*===================================================================================================================================*/
/* :Debut_listMN_MANDELBROT_COMPLEXE_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* 2 */
/* Z = Z + C */
/* n+1 n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Si |Z | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Mandelbrot. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ** */
/* ***** */
/* ***** */
/* * * ********* * */
/* ******************* ** */
/* ********************** */
/* ************************** */
/* **************************** */
/* * ***** **************************** */
/* *********** ***************************** */
/* ************ **************************** */
/* ********************************************************* */
/* ************ **************************** */
/* *********** ***************************** */
/* * ***** **************************** */
/* **************************** */
/* ************************** */
/* ********************** */
/* ******************* ** */
/* * * ********* * */
/* ***** */
/* ***** */
/* ** */
/* */
/* */
/* Nota : */
/* */
/* Nous verrons que l'on appelle */
/* Ensemble de Julia J les ensembles */
/* A */
/* obtenus a partir des iterations */
/* suivantes : */
/* */
/* Z = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* (ou 'A' designe un nombre complexe */
/* Argument arbitraire, et parametre de l'ensemble). */
/* */
/* */
/* Si nous reecrivons la definition de */
/* l'ensemble de Mandelbrot M (en remplacant */
/* 'C' par 'A') : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* (ce qui revient a faire C=0 ci-dessus, et donc */
/* a se placer a l'origine), */
/* */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* (ou 'A' designe le point courant), */
/* */
/* nous voyons que calculer M, c'est calculer */
/* en chaque point 'A' l'ensemble de Julia */
/* J (origine) a l'origine : */
/* A */
/* */
/* M(A) <==> J (origine) */
/* A */
/* */
/* or pour que J soit connexe, il faut et il */
/* A */
/* suffit que l'origine appartienne a J . Donc */
/* A */
/* M definit l'ensemble des J connexes, puisque */
/* A */
/* pour M, la suite Z reste bornee. */
/* n */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_MANDELBROT_COMPLEXE_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_____exposant,FDEUX)));
/* Introduit le 20091118113333... */
/* */
/* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite... */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_C_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Imandelbrot_dans_C_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_C_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Imandelbrot_dans_C_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Imandelbrot_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_C_____charger_____l_etat_initial))
Bblock
Cegal(suite_point,loadJ_point(Imandelbrot_dans_C_____etat_initial,X,Y));
Eblock
ATes
Bblock
Cegal(suite_point,C_____nombre_complexe__0__0);
/* Initialisation de la suite des nombres complexes sur l'origine, soit : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
/* entre Julia et Mandelbrot ne serait plus evidente... */
Eblock
ETes
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
aCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* Z + C */
/* n */
/* */
/* ou 'C' designe le point complexe Courant. */
Eblock
)
,Imandelbrot_dans_C_____exposant
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_C_____sauvegarder_l_etat_final__))
Bblock
storeJ_point(suite_point,Imandelbrot_dans_C_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E A V E C S Y M E T R I E S E V E N T U E L L E S */
/* P A R R A P P O R T A U X A X E S R E E L E T I M A G I N A I R E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_avec_symetries_axiales_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_avec_symetries_axiales_____exposant,FDEUX)));
/* Introduit le 20091118113333... */
/* */
/* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite... */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_C_avec_symetries_axiales(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,faire_une_symetrie_par_rapport_a_l_axe_reel
,faire_une_symetrie_par_rapport_a_l_axe_imaginaire
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
DEFV(Argument,DEFV(Logical,faire_une_symetrie_par_rapport_a_l_axe_reel));
/* Cet indicateur logique permet de demander une symetrie par rapport a l'axe reel */
/* avant le calcul du carre de l'element courant de la suite 'Z(n)'. */
DEFV(Argument,DEFV(Logical,faire_une_symetrie_par_rapport_a_l_axe_imaginaire));
/* Cet indicateur logique permet de demander une symetrie par rapport a l'axe imaginaire */
/* avant le calcul du carre de l'element courant de la suite 'Z(n)'. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Imandelbrot_dans_C_avec_symetries_axiales_____seuil_du_carre_du_module)
,BLOC(Bblock
Cegal(suite_point,C_____nombre_complexe__0__0);
/* Initialisation de la suite des nombres complexes sur l'origine, soit : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
/* entre Julia et Mandelbrot ne serait plus evidente... */
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(faire_une_symetrie_par_rapport_a_l_axe_reel))
Bblock
EGAL(Imaginaire(suite_point),NEGA(Imaginaire(suite_point)));
/* La partie Imaginaire change de signe, ce qui correspond en fait a l'operation de */
/* "conjugaison"... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(faire_une_symetrie_par_rapport_a_l_axe_imaginaire))
Bblock
EGAL(Reelle(suite_point),NEGA(Reelle(suite_point)));
/* La partie Reelle change de signe... */
Eblock
ATes
Bblock
Eblock
ETes
aCproduit(point_manoeuvre,suite_point,suite_point);
/* Malheureusement, il faut recalculer : */
/* */
/* 2 */
/* Z */
/* n */
/* */
aCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* Z + C */
/* n */
/* */
/* ou 'C' designe le point complexe Courant. */
Eblock
)
,Imandelbrot_dans_C_avec_symetries_axiales_____exposant
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T D I T " I N V E R S E " */
/* D A N S U N E F E N E T R E D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = C */
/* 0 */
/* */
/* 1 k */
/* Z = (---- + C) */
/* n+1 Z */
/* n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Si |Z | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Mandelbrot "inverse"... */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ......................######################.................... */
/* .................###############################................ */
/* ..............################-##...###############............. */
/* ...........##############.....#......--###############.......... */
/* ...........##############.............################.......... */
/* ..........#############--#................#############......... */
/* ..........##############.................#%############......... */
/* ..........#############.................O--:###########......... */
/* ..........############o:O:..............ooO############......... */
/* ..........#######o::o#----:...........:O::O%###########......... */
/* ...........######::::%-----o--o::-::--------o#########.......... */
/* ...........#########-------------------------#oo::####.......... */
/* ............######---------...........-------%::::Oo#........... */
/* .............####-----.....................---%%:###............ */
/* ...............o##-...........................--#%.............. */
/* ................................................................ */
/* ...............o##-...........................--#%.............. */
/* .............####-----.....................---%%:###............ */
/* ............######---------...........-------%::::Oo#........... */
/* ...........#########-------------------------#oo::####.......... */
/* ...........######::::%-----o--o::-::--------o#########.......... */
/* ..........#######o::o#----:...........:O::O%###########......... */
/* ..........############o:O:..............ooO############......... */
/* ..........#############.................O--:###########......... */
/* ..........##############.................#%############......... */
/* ..........#############--#................#############......... */
/* ...........##############.............################.......... */
/* ...........##############.....#......--###############.......... */
/* ..............################-##...###############............. */
/* .................###############################................ */
/* ......................######################.................... */
/* ............................----................................ */
/* */
/* (exposant=8) */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Imandelbrot_inverse_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_inverse_dans_C(imageR
,exposant
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(Positive,exposant));
/* Exposant 'k' ci-dessus... */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(MONX(Imandelbrot_inverse_dans_C_____seuil_du_carre_du_module,exposant))
,BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le nombre courant 'C' : */
/* */
/* Z = C */
/* 0 */
/* */
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
DEFV(complexe,point_manoeuvre_3);
DEFV(complexe,point_manoeuvre_4);
/* Points complexes de maneuvre lors de l'iteration. */
Test(IZNE(Cmodule2(suite_point)))
Bblock
aCquotient(point_manoeuvre_1,C_____nombre_complexe_p1__0,suite_point);
/* Calcul de : */
/* */
/* 1 */
/* ---- */
/* Z */
/* n */
/* */
aCsomme(point_manoeuvre_2,point_manoeuvre_1,point_courant);
/* Calcul de : */
/* */
/* 1 */
/* ---- + C */
/* Z */
/* n */
/* */
Cegal(point_manoeuvre_3,C_____nombre_complexe_p1__0);
Repe(exposant)
Bblock
aCproduit(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_2);
Cegal(point_manoeuvre_3,point_manoeuvre_4);
/* Calcul de : */
/* */
/* 1 k */
/* (---- + C) */
/* Z */
/* n */
/* */
Eblock
ERep
Cegal(suite_point,point_manoeuvre_3);
/* Et enfin, mise a jour de : */
/* */
/* Z */
/* n */
/* */
Eblock
ATes
Bblock
Cinitialisation(suite_point,FLOT(INFINI),FLOT(INFINI));
/* Cas d'une division par 0 : on force l'infini en se moquant du signe puisque de toute */
/* c'est ensuite 'Cmodule2(...)' qui est teste... ATTENTION, on notera l'utilisation de */
/* 'FLOT(INFINI)' et non pas de 'F_INFINI' afin d'eviter d'eventuels problemes de */
/* debordement ulterieurs... */
Eblock
ETes
Eblock
)
,DEUX
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_JULIA_COMPLEXE_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E J U L I A D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* (ou 'A' designe un nombre complexe */
/* Argument arbitraire). */
/* */
/* Si |Z | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Julia */
/* calcule pour le nombre complexe 'A'. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* *...... .....*.... */
/* *......*.................****... */
/* ********...............***..... */
/* ........**.............***..... */
/* .........**...........**........ */
/* ..........***************........ */
/* ........**...***..******...... */
/* ....*............***......... */
/* ...............**........... */
/* ..............***....*..*.. */
/* ..........********...... */
/* ...........***...... */
/* ..........**...... */
/* ........*****.. */
/* ........*..... */
/* .....***..... */
/* .....*........ */
/* ..*****........ */
/* ......**.......... */
/* ......***........... */
/* ......********.......... */
/* ..*..*....***.............. */
/* ...........**............... */
/* .........***............*.... */
/* ......******..***...**........ */
/* ........***************......... */
/* ........**...........**........ */
/* .....***.............**....... */
/* .....***...............******* */
/* ...****.................*...... */
/* ....*..... ...... */
/* ****.... */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_JULIA_COMPLEXE_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____exposant,FDEUX)));
/* Introduit le 20091118113333... */
/* */
/* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____ponderation__point_courant_C,FZERO)));
/* Introduit le 20130825092858... */
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_C_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Ijulia_dans_C_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_C_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Ijulia_dans_C_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
DEFV(complexe,point_argument);
/* Point complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
Cegal(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre complexe "generateur"... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Ijulia_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_C_____charger_____l_etat_initial))
Bblock
Cegal(suite_point,loadJ_point(Ijulia_dans_C_____etat_initial,X,Y));
Eblock
ATes
Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Z = C */
/* 0 */
/* */
Eblock
ETes
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
DEFV(complexe,point_manoeuvre_1);
aCcombinaison_lineaire_2(point_manoeuvre_1
,Ijulia_dans_C_____ponderation_point_argument_A,point_argument
,Ijulia_dans_C_____ponderation__point_courant_C,point_courant
);
aCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
/* Puis : */
/* */
/* 2 */
/* Z + A */
/* n */
/* */
/* ou 'A' designe le point complexe Argument. */
/* */
/* Ou plus generalement (introduit le 20130825092858) : */
/* */
/* 2 */
/* Z + p .A + p .C */
/* n A C */
/* */
/* avec pA=1 et pC=0 par defaut... */
Eblock
)
,Ijulia_dans_C_____exposant
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_C_____sauvegarder_l_etat_final__))
Bblock
storeJ_point(suite_point,Ijulia_dans_C_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E V E R H U L S T D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* Z = R.Z .(1 - Z ) */
/* n+1 n n */
/* */
/* (ou 'R' designe un nombre reel Argument */
/* arbitraire appele "taux de croissance"). */
/* */
/* Si |Z | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Verhulst */
/* calcule pour le nombre reel 'R'. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* .........................#.###########.#........................ */
/* ........................#################....................... */
/* ............####.......###################.......####........... */
/* .........##########...#####################...##########........ */
/* ....###..###########..#####################..###########..###... */
/* ################################################################ */
/* ....###..###########..#####################..###########..###... */
/* .........##########...#####################...##########........ */
/* ............####.......###################.......####........... */
/* ........................#################....................... */
/* .........................#.###########.#........................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_C_____utiliser_la_forme_la_plus_simple,VRAI)));
/* Faut-il utiliser la forme ('VRAI') : */
/* */
/* Z = R.Z .(1 - Z ) */
/* n+1 n n */
/* */
/* ou bien la forme ('FAUX') : */
/* */
/* 2 */
/* Z = (R+1).Z - R.Z */
/* n+1 n n */
/* */
/* Ceci a ete introduit le 20040921105449. */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas */
/* particulier du calcul de l'ensemble de Verhulst. ATTENTION : j'ai utilise quelque temps */
/* la valeur suivante : */
/* */
/* EXP2(FLOT(MILLE)) */
/* */
/* mais, je prefere revenir a la valeur standard... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(taux_de_croissance)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
/* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iverhulst_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Z = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(Iverhulst_dans_C_____utiliser_la_forme_la_plus_simple))
/* Ce test a ete introduit le 20040921105449... */
Bblock
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
/* Points complexes de maneuvre lors de l'iteration. */
aCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
/* Calcul de : */
/* */
/* 1 - Z = -Z + 1 */
/* n n */
/* */
aCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
/* Calcul de : */
/* */
/* Z .(1 - Z ) */
/* n n */
/* */
aCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
/* Calcul de : */
/* */
/* Z = R.Z .(1 - Z ) */
/* n+1 n n */
/* */
Eblock
ATes
Bblock
/* Cette formulation a ete introduite le 20040921105449... */
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
DEFV(complexe,point_manoeuvre_3);
DEFV(complexe,point_manoeuvre_4);
/* Points complexes de maneuvre lors de l'iteration. */
aCproduit(point_manoeuvre_1,suite_point,suite_point);
/* Calcul de : */
/* */
/* 2 */
/* Z */
/* n */
/* */
aCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
/* Calcul de : */
/* */
/* 2 */
/* R.Z */
/* n */
/* */
aCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
/* Calcul de : */
/* */
/* R+1 */
/* */
aCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
/* Calcul de : */
/* */
/* (R+1).Z */
/* n */
/* */
aCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
/* Calcul de : */
/* */
/* 2 */
/* Z = (R+1).Z - R.Z */
/* n+1 n n */
/* */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'Cpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E C O L O N N A D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
#define TRANSFORMATION_COLONNA_1(point) \
Bblock \
Eblock \
/* "Transformation" de type 1... */
#define TRANSFORMATION_COLONNA_2(point) \
Bblock \
DEFV(Float,INIT(module,FLOT__UNDEF)); \
/* Module du nombre complexe 'point', */ \
DEFV(Float,INIT(argument,FLOT__UNDEF)); \
/* Argument du nombre complexe 'point'. */ \
EGAL(module,Cmodule(point)); \
/* Calcul du module du nombre complexe de manoeuvre, */ \
EGAL(argument,Cargument_PI(point)); \
/* Et calcul de son argument. */ \
Cinitialisation(point \
,Xcartesienne_2D(module,argument) \
,Ycartesienne_2D(module,argument) \
); \
/* Et "reconstitution" du nombre complexe de manoeuvre... */ \
Eblock \
/* "Transformation" de type 2... */
#define TRANSFORMATION_COLONNA_3(point) \
Bblock \
DEFV(Float,INIT(module,FLOT__UNDEF)); \
/* Module du nombre complexe 'point', */ \
DEFV(Float,INIT(argument,FLOT__UNDEF)); \
/* Argument du nombre complexe 'point'. */ \
EGAL(module,Cmodule(point)); \
/* Calcul du module du nombre complexe de manoeuvre, */ \
EGAL(argument,Cargument_PI(point)); \
/* Et calcul de son argument, */ \
EGAL(argument,MUL2(MUL2(amplitude,module),argument)); \
/* Puis transformation de ce dernier par modulation par le 'module', */ \
/* afin de creer un effet de spirale. */ \
Cinitialisation(point \
,Xcartesienne_2D(module,argument) \
,Ycartesienne_2D(module,argument) \
); \
/* Et "reconstitution" du nombre complexe de manoeuvre... */ \
Eblock \
/* "Transformation" de type 3... */
#define TRANSFORMATION_COLONNA(point) \
Bblock \
TRANSFORMATION_COLONNA_3(point) \
Eblock \
/* Transformation choisie... */
DEFV(Common,DEFV(FonctionP,POINTERp(Icolonna_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,amplitude
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de COLONNA que l'on veut calculer. */
DEFV(Argument,DEFV(Float,amplitude));
/* Afin de moduler le module... */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
DEFV(complexe,point_argument);
/* Point complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
Cegal(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre complexe "generateur"... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(iterations_diverses_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Cegal(suite_point,C_____nombre_complexe__0__0);
/* Initialisation de la suite des nombres complexes sur l'origine, */
/* soit : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
/* difference entre Julia et Mandelbrot ne serait plus evidente... */
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
TRANSFORMATION_COLONNA(point_manoeuvre);
aCsomme(suite_point,point_manoeuvre,point_courant);
aCproduit(point_manoeuvre,point_argument,point_courant);
TRANSFORMATION_COLONNA(point_manoeuvre);
aCsomme(suite_point,suite_point,point_manoeuvre);
/* Puis : */
/* */
/* 2 */
/* Z = Z + (A.Z ) + C */
/* n+1 n n */
/* */
/* ou 'C' designe le point Courant et 'A' le point Argument. */
Eblock
)
,DEUX
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
#undef TRANSFORMATION_COLONNA
#undef TRANSFORMATION_COLONNA_3
#undef TRANSFORMATION_COLONNA_2
#undef TRANSFORMATION_COLONNA_1
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_RACINES_TROISIEMES_UNITE_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E S R A C I N E S T R O I S I E M E S D E L ' U N I T E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Rappelons la methode iterative de */
/* Newton pour la resolution d'une equation */
/* du type : */
/* */
/* f(x) = 0 */
/* */
/* Soit 'G' la courbe d'equation y=f(x) : */
/* */
/* ^ */
/* Y | + / tangente en T a la courbe G */
/* | / */
/* | + / */
/* | / */
/* | +/ */
/* | *T */
/* | y = f(x) + /. */
/* | + / . */
/* | + / . */
/* | + / . */
/* | + / . */
/* ----------O----------+----/---------------------------------> */
/* | + /X X X */
/* | G + / n+1 n */
/* */
/* */
/* Partant de l'abscisse X , on determine */
/* n */
/* la tangente au point (X ,f(X )) a la courbe 'G'. */
/* n n */
/* Son equation est : */
/* */
/* y = f'(X )(x - X ) + f(X ) */
/* n n n */
/* */
/* Son intersection avec l'axe 'OX' a pour */
/* abscisse : */
/* */
/* f(X ) */
/* n */
/* X = X - -------- */
/* n+1 n f'(X ) */
/* n */
/* */
/* Enfin, on itere ce processus. */
/* */
/* */
/* De meme dans le plan complexe, soit a */
/* resoudre l'equation : */
/* */
/* 3 */
/* Z = 1 */
/* */
/* qui donne les trois racines de l'unite, on */
/* procede a l'iteration suivante : */
/* */
/* Z = C */
/* 0 */
/* */
/* 3 */
/* Z - 1 */
/* n */
/* Z = Z - -------- */
/* n+1 n 2 */
/* 3.Z */
/* n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Si |Z | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Racine3. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ::::::::::::::::::::::::::::::::::::::::::::o:ooooooooooooo */
/* ::::::::::::::::::::::::::::::::::::::::::::oooooooooo:: */
/* :::::::::::::::::::::::::::::::::::::::::::::ooooooo:: */
/* :::::::::::::::::::::::::::::::::::::::::::::ooooo */
/* :::::::::::::::::::::::::::::::::::::o */
/* :::::::::::::::::::::::::::::::::::oo ooo::: */
/* ::::::::::::::::::::::::::::::::::: o::oooooo:::: */
/* :::::::::::::::::::::::::::::::::o ooooooooo::::o */
/* ::::::::::::::::::::::::::::::::: ooooooooooo ::o: */
/* :::::::::::::::::::::::::::::::::ooooooooooooo: */
/* :::::::::::::::::::::::::::::::::ooooooooooo :o */
/* :::::::::::: ::::::::::::::::::::oooooooooo:: */
/* ::::::::: oooooooo:oo :::::::::: oooooooo:: */
/* :o::::::ooooo: o::::::: ooooo */
/* :::oooo ::: ooo */
/* . */
/* ooo:::: ooo ::: */
/* o:oooooo:::::o :ooooooo ::::: */
/* ooooooooo ::::::::o:: oooooooooo ::::::::oo */
/* oooooooooooo oooooooooooooooooooo::::::::::oo */
/* ooooooooooooooooooooooooooooooooo::::::::::: o: */
/* ooooooooooooooooooooooooooooooooo:::::::::::::o */
/* ooooooooooooooooooooooooooooooooo ::::::::::: oo:o */
/* ooooooooooooooooooooooooooooooooo: :::::::::oooo: */
/* ooooooooooooooooooooooooooooooooooo :oo::::::oooo */
/* ooooooooooooooooooooooooooooooooooo:: :::ooo */
/* ooooooooooooooooooooooooooooooooooooo: */
/* ooooooooooooooooooooooooooooooooooooooooooooo::::: */
/* ooooooooooooooooooooooooooooooooooooooooooooo:::::::oo */
/* oooooooooooooooooooooooooooooooooooooooooooo::::::::::oo */
/* oooooooooooooooooooooooooooooooooooooooooooo:o::::::::::::: */
/* oooooooooooooooooooooooooooooooooooooooooooooo::::::::::ooo: */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_RACINES_TROISIEMES_UNITE_COMPLEXES_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iracines_troisiemes_de_l_unite_dans_C_____seuil_du_carre_du_module,F_INFINI)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas */
/* particulier de la recherche des racines troisiemes de l'unite... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_troisiemes_de_l_unite_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/* */
/* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument */
/* de sortie qui permet de visualiser la racine (parmi les 3) vers laquelle on converge, */
/* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les 3 arguments possibles */
/* sont tres differents les uns des autres et se distinguent par les couleurs. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
DEFV(complexe,point_manoeuvre_reel);
/* Constante imaginaire (1,0). */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
Cegal(point_manoeuvre_reel,C_____nombre_complexe_p1__0);
/* Initialisation de la constante imaginaire (1,0). */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iracines_troisiemes_de_l_unite_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Z = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IZNE(Cmodule2(suite_point)))
Bblock
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
DEFV(complexe,point_manoeuvre_3);
DEFV(complexe,point_manoeuvre_4);
DEFV(complexe,point_manoeuvre_5);
/* Points complexes de maneuvre lors de l'iteration. */
aCforme_lineaire(point_manoeuvre_1,FLOT(TROIS),point_manoeuvre,FZERO)
/* Calcul de : */
/* */
/* 2 */
/* 3.Z */
/* n */
/* */
aCproduit(point_manoeuvre_2,suite_point,point_manoeuvre);
aCdifference(point_manoeuvre_3,point_manoeuvre_2,point_manoeuvre_reel);
/* Puis de : */
/* */
/* 3 */
/* Z - 1 */
/* n */
/* */
aCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
/* Puis de : */
/* */
/* 3 */
/* Z - 1 */
/* n */
/* -------- */
/* 2 */
/* 3.Z */
/* n */
/* */
aCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
Cegal(suite_point,point_manoeuvre_5);
/* Puis de : */
/* */
/* 3 */
/* Z - 1 */
/* n */
/* Z = Z - -------- */
/* n+1 n 2 */
/* 3.Z */
/* n */
/* */
Eblock
ATes
Bblock
/* L'origine (0,0) est un point particulier... */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'Cpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_RACINES_N_IEMES_UNITE_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E S R A C I N E S N - I E M E S D E L ' U N I T E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Rappelons la methode iterative de */
/* Newton pour la resolution d'une equation */
/* du type : */
/* */
/* f(x) = 0 */
/* */
/* Soit 'G' la courbe d'equation y=f(x) : */
/* */
/* ^ */
/* Y | + / tangente en T a la courbe G */
/* | / */
/* | + / */
/* | / */
/* | +/ */
/* | *T */
/* | y = f(x) + /. */
/* | + / . */
/* | + / . */
/* | + / . */
/* | + / . */
/* ----------O----------+----/---------------------------------> */
/* | + /X X X */
/* | G + / n+1 n */
/* */
/* */
/* Partant de l'abscisse X , on determine */
/* n */
/* la tangente au point (X ,f(X )) a la courbe 'G'. */
/* n n */
/* Son equation est : */
/* */
/* y = f'(X )(x - X ) + f(X ) */
/* n n n */
/* */
/* Son intersection avec l'axe 'OX' a pour */
/* abscisse : */
/* */
/* f(X ) */
/* n */
/* X = X - -------- */
/* n+1 n f'(X ) */
/* n */
/* */
/* Enfin, on itere ce processus. */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_RACINES_N_IEMES_UNITE_COMPLEXES_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_C_____seuil_du_carre_du_module,F_INFINI)));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas */
/* particulier de la recherche des racines n_iemes de l'unite... */
DEFV(Common,DEFV(Logical,SINT(Iracines_n_iemes_de_l_unite_dans_C_____marquer_les_racines_de_l_unite,FAUX)));
DEFV(Common,DEFV(genere_p,SINT(Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite,BLANC)));
/* Introduit le 20200623115258 pour montrer la position des racines de l'unite... */
/* */
/* Le 20200627112145, je note un danger : que 'niveau_des_racines_de_l_unite', niveau de */
/* marquage des racines de l'unite soit rencontre dans 'F_ITERATION_DANS_C(...)' (soit */
/* 'v $ximcf/iterations$FON store_point.niveau_courant.imageR.X.Y.FVARIABLE..'). Mais que */
/* faire a part le test introduit le 20200627112145 ci-apres ? */
DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,exposant
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,exposant));
/* Exposant 'N'. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/* */
/* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument */
/* de sortie qui permet de visualiser la racine (parmi les N) vers laquelle on converge, */
/* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les N arguments possibles */
/* sont tres differents les uns des autres et se distinguent par les couleurs. C'est la */
/* raison pour laquelle cet argument n'est pas un parametre des programmes appelant */
/* ('v $xrc/racN.01$K visualisation_arguments_de_sortie')... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
DEFV(complexe,exposant_complexe_moins_1);
/* Exposant complexe moins 1. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iracines_n_iemes_de_l_unite_dans_C_____seuil_du_carre_du_module)
,BLOC(Bblock
Cinitialisation(exposant_complexe_moins_1,FLOT(PRED(exposant)),I0_Complexe);
/* Conversion complexe de l'exposant moins 1. */
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Z = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IZNE(Cmodule2(suite_point)))
Bblock
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_3);
DEFV(complexe,point_manoeuvre_4);
DEFV(complexe,point_manoeuvre_5);
DEFV(complexe,point_manoeuvre_6);
DEFV(complexe,point_manoeuvre_7);
/* Points complexes de maneuvre lors de l'iteration. */
Cexponentielle_complexe(point_manoeuvre_6,suite_point,exposant_complexe_moins_1);
/* Calcul de : */
/* */
/* N-1 */
/* Z */
/* n */
/* */
aCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
/* Calcul de : */
/* */
/* N */
/* Z */
/* n */
/* */
aCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
/* Calcul de : */
/* */
/* N-1 */
/* N.Z */
/* n */
/* */
aCdifference(point_manoeuvre_3,point_manoeuvre_7,C_____nombre_complexe_p1__0);
/* Puis de : */
/* */
/* N */
/* Z - 1 */
/* n */
/* */
aCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
/* Puis de : */
/* */
/* N */
/* Z - 1 */
/* n */
/* --------- */
/* N-1 */
/* N.Z */
/* n */
/* */
aCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
Cegal(suite_point,point_manoeuvre_5);
/* Puis de : */
/* */
/* N */
/* Z - 1 */
/* n */
/* Z = Z - -------- */
/* n+1 n N-1 */
/* N.Z */
/* n */
/* */
Eblock
ATes
Bblock
/* L'origine (0,0) est un point particulier... */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'Cpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
Test(IL_FAUT(Iracines_n_iemes_de_l_unite_dans_C_____marquer_les_racines_de_l_unite))
/* Introduit le 20200623115258... */
Bblock
Test(IFGE(niveau_courant_maximal,Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite))
/* Introduit le 20200627112145... */
Bblock
PRINT_ATTENTION("le niveau de marquage des racines de l'unite a ete rencontre lors du marquage des iterations");
CAL1(Prer2("(il vaut %d alors qu'au moins un niveau egal a %d a ete rencontre)\n"
,Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite
,niveau_courant_maximal
)
);
/* Que faire alors ? Diminuer le nombre d'iterations ? */
Eblock
ATes
Bblock
Eblock
ETes
Repe(exposant)
Bblock
DEFV(complexe,suite_point);
Cinitialisation_polaire(suite_point
,Rho1_Complexe
,SCAL(CERCLE_TRIGONOMETRIQUE
,exposant
,SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
)
);
/* Calcul exact de l'une des 'exposant's racines de l'unite... */
store_point(Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite
,imageR
,X_PLAN_IMAGE,Y_PLAN_IMAGE
,FVARIABLE
);
/* Marquage de l'une des 'exposant's racines de l'unite... */
Eblock
ERep
Eblock
ATes
Bblock
Eblock
ETes
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' E X P O S A N T D E L Y A P U N O V */
/* D ' U N S Y S T E M E D Y N A M I Q U E D E F I N I P A R U N E S U I T E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant \
/* Definition des variables communes a toutes les fonctions calculant l'exposant de Lyapunov */ \
/* d'un systeme dynamique... */ \
DEFV(Int,INIT(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov \
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov \
) \
); \
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */ \
/* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement */ \
/* elles), le mode utilise peut etre different de celui qui a ete demande... */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */
#define BVARIABLES_F_EXPOSANT_LYAPUNOV \
/* Definition des variables communes a toutes les fonctions calculant l'exposant de Lyapunov */ \
/* d'un systeme dynamique... */ \
BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant \
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */ \
/* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement */ \
/* elles), le mode utilise peut etre different de celui qui a ete demande, de meme que */ \
/* "taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(complexe,point_courant); \
/* Point complexe courant 'C' dans la fenetre ; il n'est utile que pour les fonctions du */ \
/* type : */ \
/* */ \
/* IFmandelbrot_Lyapunov_dans_C(...), */ \
/* IFjulia_Lyapunov_dans_C(...), */ \
/* IFverhulst_Lyapunov_dans_C(...), */ \
/* */
#define VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV \
Bblock \
Choi(mode_de_calcul_demande_pour_l_exposant_de_Lyapunov) \
Bblock \
Ca3e(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE \
,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_IMAGINAIRE_DE_LA_DERIVEE \
,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DU_MODULE_DE_LA_DERIVEE \
) \
Bblock \
Eblock \
ECa3 \
\
Defo \
Bblock \
PRINT_ERREUR("le mode de calcul de l'exposant de Lyapunov demande n'existe pas"); \
EGAL(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov \
,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE \
); \
/* On force la facon de calculer l'exposant de Lyapunov lorsque le mode n'est pas reconnu. */ \
Eblock \
EDef \
Eblock \
ECho \
Eblock \
/* Validation du mode demande pour le calcul de l'exposant de Lyapunov. */
#define MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV \
Bblock \
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV; \
/* Validation du mode demande pour le calcul de l'exposant de Lyapunov. */ \
\
Test(IZEQ(Imaginaire(INDIRECT(valeur_initiale_P0_de_Pn)))) \
Bblock \
EGAL(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov \
,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE \
); \
/* Dans le cas ou le generateur est un nombre Reel, on force le mode de calcul de l'exposant */ \
/* de Lyapunov... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
#define COMMENT_CALCULER_LA_DERIVEE(methode) \
IFEQ(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov \
,methode \
)
#define PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_courante) \
CON03(COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE) \
,ABSO(Reelle(derivee_courante)) \
,COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_IMAGINAIRE_DE_LA_DERIVEE) \
,ABSO(Imaginaire(derivee_courante)) \
,COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DU_MODULE_DE_LA_DERIVEE) \
,Cmodule(derivee_courante) \
,FLOT__UNDEF \
) \
/* Definition de la methode de passage de la derivee de la fonction iteree (en general */ \
/* complexe) a l'exposant de Lyapunov (du moins a la partie a cumuler...). */
#define TRES_PETIT_EXPOSANT_DE_LYAPUNOV \
F_MOINS_LE_PETIT_INFINI \
/* Valeur de l'exposant de Lyapunov lorsque il est trop petit ('log(0)' par exemple...). */ \
/* Cette valeur est de loin preferable a 'F_MOINS_L_INFINI' qui si elle est ensuite traitee */ \
/* dans des expressions arithmetiques risque de provoquer des 'OVERFLOW's... */
#define F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(numero_de_la_premiere_iteration,init_iteration,fonc_iteration) \
Bblock \
DEFV(Int,INIT(numero_de_l_iteration,UNDEF)); \
/* Indice 'n' de la suite 'X'... */ \
DEFV(complexe,element_courant_de_la_suite_Pn); \
/* Element courant Z de la suite. */ \
/* n */ \
DEFV(Float,INIT(approximation_de_l_exposant_de_Lyapunov,FZERO)); \
/* Valeur courante de l'approximation de l'exposant de Lyapunov. */ \
\
BLOC(init_iteration); \
/* Initialisation de la suite definissant le systeme dynamique... */ \
\
DoIn(numero_de_l_iteration \
,numero_de_la_premiere_iteration \
,LSTX(numero_de_la_premiere_iteration,nombre_d_iterations) \
,I \
) \
Bblock \
DEFV(complexe,derivee_de_la_suite_Pn); \
Cinitialisation(derivee_de_la_suite_Pn,FLOT__UNDEF,FLOT__UNDEF); \
/* Destinee a memoriser la derivee de l'element courant de la suite ; cette variable a ete */ \
/* introduite afin d'alleger les tests 'Test(...)' et 'ABSO(...)' qui vont suivre... */ \
BLOC(fonc_iteration); \
/* Calcul du systeme dynamique par iteration du calcul de la suite... */ \
\
/* ATTENTION : les tests de debordements qui suivent ne figuraient pas dans l'ancien code */ \
/* de la fonction 'IFespace_de_Lyapunov(...)', c'est-a-dire avant que ne soient introduites */ \
/* les fonctions : */ \
/* */ \
/* IFmandelbrot_Lyapunov_dans_C(...), */ \
/* IFjulia_Lyapunov_dans_C(...), */ \
/* IFverhulst_Lyapunov_dans_C(...), */ \
/* */ \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au */ \
/* carre lors de l'eventuelle iteration suivante... */ \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(derivee_de_la_suite_Pn,pEPSILON); \
TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(derivee_de_la_suite_Pn,RACX(F_INFINI)); \
/* Et on fait de meme pour la derivee... */ \
\
/* ATTENTION : les tests de debordements qui precedent ne figuraient pas dans l'ancien code */ \
/* de la fonction 'IFespace_de_Lyapunov(...)', c'est-a-dire avant que ne soient introduites */ \
/* les fonctions : */ \
/* */ \
/* IFmandelbrot_Lyapunov_dans_C(...), */ \
/* IFjulia_Lyapunov_dans_C(...), */ \
/* IFverhulst_Lyapunov_dans_C(...), */ \
/* */ \
\
Test(IZNE(PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_de_la_suite_Pn))) \
Bblock \
INCR(approximation_de_l_exposant_de_Lyapunov \
,LOGX(PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_de_la_suite_Pn)) \
); \
/* Et calcul itere de l'approximation de l'exposant de Lyapunov ; on regarde pour cela la */ \
/* "vitesse" a laquelle les valeurs successives de la suite augmentent ou diminuent, d'ou */ \
/* la derivee de la suite... */ \
Eblock \
ATes \
Bblock \
INCR(approximation_de_l_exposant_de_Lyapunov \
,TRES_PETIT_EXPOSANT_DE_LYAPUNOV \
); \
/* Et ce afin d'eviter de calculer 'LOGX(0)'. */ \
/* */ \
/* ATTENTION, la valeur 'TRES_PETIT_EXPOSANT_DE_LYAPUNOV' est telle qu'elle peut etre */ \
/* cumulee comme toute autre valeur sans risque d'OVERFLOWs ulterieurs... */ \
Eblock \
ETes \
Eblock \
EDoI \
\
EGAL(approximation_de_l_exposant_de_Lyapunov \
,fDIVZ(DIVI(approximation_de_l_exposant_de_Lyapunov \
,LOGX(FDEUX) \
) \
,FLOT(nombre_d_iterations) \
) \
); \
/* Et calcul de l'approximation de l'exposant de Lyapunov. On notera que l'on divise d'une */ \
/* part par log(2), et d'autre part par le nombre d'iterations. C'est uniquement pour faire */ \
/* "joli", puisqu'en general il y a apres un appel a 'Ifloat_std_avec_renormalisation(...)'. */ \
/* */ \
/* Le 20071201105941 'DIVZ(...)' fut remplace tardivement par 'fDIVZ(...)'... */ \
\
Test(IFET(IL_NE_FAUT_PAS(visualiser_les_exposants_negatifs) \
,IZLT(approximation_de_l_exposant_de_Lyapunov) \
) \
) \
Bblock \
EGAL(approximation_de_l_exposant_de_Lyapunov,FZERO); \
/* Lorsqu'il faut ignorer les exposants negatifs (correspondant, rappelons-le aux parties */ \
/* stables), on ramene l'approximation a zero... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFET(IL_NE_FAUT_PAS(visualiser_les_exposants_positifs) \
,IZGT(approximation_de_l_exposant_de_Lyapunov) \
) \
) \
Bblock \
EGAL(approximation_de_l_exposant_de_Lyapunov,FZERO); \
/* Lorsqu'il faut ignorer les exposants positifs (correspondant, rappelons-le aux parties */ \
/* chaotiques), on ramene l'approximation a zero... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
storeF_point(MUL2(facteur_multiplicatif,approximation_de_l_exposant_de_Lyapunov) \
,imageR \
,X,Y \
); \
/* Generation de l'image "flottante"... */ \
Eblock \
/* Calcul general de l'exposant de Lyapunov d'un systeme dynamique defini par une suite... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " F L O T T A N T " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E M A N D E L B R O T */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Imandelbrot_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionF
DEFV(Common,DEFV(FonctionF,POINTERF(IFmandelbrot_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(imageF,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFinitialisation(imageR,FZERO));
/* Initialisation, on ne sait jamais... */
begin_image
Bblock
F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_C;
/* Initialisation du "point Courant" 'C'. */
Cegal(element_courant_de_la_suite_Pn,C_____nombre_complexe__0__0);
/* Initialisation de la suite des nombres complexes sur l'origine, soit : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* on notera que l'on pourrait optimiser, en partant directement sur 'C', mais alors, la */
/* difference entre Julia et Mandelbrot ne serait plus evidente... */
Eblock
)
,BLOC(Bblock
DEFV(complexe,point_manoeuvre);
/* Point complexe de maneuvre lors de l'iteration. */
aCproduit(point_manoeuvre
,element_courant_de_la_suite_Pn
,element_courant_de_la_suite_Pn
);
aCsomme(element_courant_de_la_suite_Pn,point_manoeuvre ,point_courant);
/* Calcul de : */
/* */
/* 2 */
/* Z = Z + C */
/* n+1 n */
/* */
/* ou 'C' designe le point complexe Courant. */
aCforme_lineaire(derivee_de_la_suite_Pn
,FDEUX
,element_courant_de_la_suite_Pn
,FZERO
);
/* Calcul de : */
/* */
/* d(Z ) = 2.Z */
/* n+1 n */
/* */
Eblock
)
);
Eblock
end_image
RETIF(imageR);
Eblock
EFonctionF
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " S T A N D A R D " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E M A N D E L B R O T */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Imandelbrot_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
BDEFV(imageF,ensemble_de_Mandelbrot);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot "flottant"... */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFmandelbrot_Lyapunov_dans_C(ensemble_de_Mandelbrot
,coin_bas_gauche
,coin_haut_droite
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
);
/* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot en "flottant", */
/* et donc sans renormalisation... */
CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Mandelbrot));
/* Et enfin, conversion du champ flottant en une image avec renormalisation. */
EDEFV(imageF,ensemble_de_Mandelbrot);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot "flottant"... */
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " F L O T T A N T " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E J U L I A */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Ijulia_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionF
DEFV(Common,DEFV(FonctionF,POINTERF(IFjulia_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(imageF,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV
DEFV(complexe,point_argument);
/* Point complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFinitialisation(imageR,FZERO));
/* Initialisation, on ne sait jamais... */
Cegal(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre complexe "generateur"... */
begin_image
Bblock
F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_C;
/* Initialisation du "point Courant" 'C'. */
Cegal(element_courant_de_la_suite_Pn,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', soit : */
/* */
/* Z = C */
/* 0 */
/* */
Eblock
)
,BLOC(Bblock
DEFV(complexe,point_manoeuvre);
/* Point complexe de maneuvre lors de l'iteration. */
aCproduit(point_manoeuvre
,element_courant_de_la_suite_Pn
,element_courant_de_la_suite_Pn
);
aCsomme(element_courant_de_la_suite_Pn,point_manoeuvre,point_argument);
/* Calcul de : */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* ou 'A' designe le point complexe Argument. */
aCforme_lineaire(derivee_de_la_suite_Pn
,FDEUX
,element_courant_de_la_suite_Pn
,FZERO
);
/* Calcul de : */
/* */
/* d(Z ) = 2.Z */
/* n+1 n */
/* */
Eblock
)
);
Eblock
end_image
RETIF(imageR);
Eblock
EFonctionF
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " S T A N D A R D " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E J U L I A */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Ijulia_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
BDEFV(imageF,ensemble_de_Julia);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Julia "flottant"... */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFjulia_Lyapunov_dans_C(ensemble_de_Julia
,coin_bas_gauche
,coin_haut_droite
,nombre_argument
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
);
/* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Julia en "flottant", */
/* et donc sans renormalisation... */
CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Julia));
/* Et enfin, conversion du champ flottant en une image avec renormalisation. */
EDEFV(imageF,ensemble_de_Julia);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Julia "flottant"... */
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " F L O T T A N T " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E V E R H U L S T */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Iverhulst_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionF
DEFV(Common,DEFV(FonctionF,POINTERF(IFverhulst_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(taux_de_croissance)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(imageF,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
/* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFinitialisation(imageR,FZERO));
/* Initialisation, on ne sait jamais... */
begin_image
Bblock
F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_C;
/* Initialisation du "point Courant" 'C'. */
Cegal(element_courant_de_la_suite_Pn,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', soit : */
/* */
/* Z = C */
/* 0 */
/* */
Eblock
)
,BLOC(Bblock
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
/* Points complexes de maneuvre lors de l'iteration. */
aCforme_lineaire(point_manoeuvre_1
,NEGA(FU)
,element_courant_de_la_suite_Pn
,FU
);
/* Calcul de : */
/* */
/* 1 - Z = -Z + 1 */
/* n n */
/* */
aCproduit(point_manoeuvre_2
,element_courant_de_la_suite_Pn
,point_manoeuvre_1
);
/* Calcul de : */
/* */
/* Z .(1 - Z ) */
/* n n */
/* */
aCproduit(element_courant_de_la_suite_Pn
,INDIRECT(taux_de_croissance)
,point_manoeuvre_2
);
/* Calcul de : */
/* */
/* Z = R.Z .(1 - Z ) */
/* n+1 n n */
/* */
aCproduit(point_manoeuvre_1
,INDIRECT(taux_de_croissance)
,element_courant_de_la_suite_Pn
);
/* Calcul de : */
/* */
/* R.Z */
/* n */
/* */
aCforme_lineaire(point_manoeuvre_2,NEGA(FDEUX),point_manoeuvre_1,FZERO);
/* Calcul de : */
/* */
/* -2.R.Z */
/* n */
/* */
aCsomme(derivee_de_la_suite_Pn
,point_manoeuvre_2
,INDIRECT(taux_de_croissance)
);
/* Calcul de : */
/* */
/* d(Z ) = R - 2.R.Z */
/* n+1 n */
/* */
/* d(Z ) = -2.R.Z + R */
/* n+1 n */
/* */
Eblock
)
);
Eblock
end_image
RETIF(imageR);
Eblock
EFonctionF
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " S T A N D A R D " D E L ' E X P O S A N T D E L Y A P U N O V */
/* P O U R L ' E N S E M B L E D E V E R H U L S T */
/* D A N S U N E F E N E T R E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'Iverhulst_dans_C(...)'. */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_Lyapunov_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(taux_de_croissance)
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
/* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
BDEFV(imageF,ensemble_de_Verhulst);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Verhulst "flottant"... */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFverhulst_Lyapunov_dans_C(ensemble_de_Verhulst
,coin_bas_gauche
,coin_haut_droite
,taux_de_croissance
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
);
/* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Verhulst en "flottant", */
/* et donc sans renormalisation... */
CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Verhulst));
/* Et enfin, conversion du champ flottant en une image avec renormalisation. */
EDEFV(imageF,ensemble_de_Verhulst);
/* Exposant de Lyapunov d'un morceau de l'ensemble de Verhulst "flottant"... */
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_ESPACE_LYAPUNOV_COMPLEXE_11: */
/*************************************************************************************************************************************/
/* */
/* E S P A C E D E V E R H U L S T - L Y A P U N O V : */
/* */
/* */
/* Definition : */
/* */
/* Rappelons le principe de la Dynamique de */
/* Verhulst (voir les fichiers 'v $xrk/verhulst.??$K'). */
/* Une version "simplifiee" est donnee par l'iteration */
/* suivante : */
/* */
/* X = R.X .(1 - X ) */
/* n+1 n n */
/* */
/* Le comportement de cette suite depend fortement de */
/* la valeur de 'R', et pour R > 3.56994571869, son */
/* comportement devient chaotique, ainsi que le montre */
/* le graphe suivant : */
/* */
/* */
/* R ^ */
/* | . */
/* |*** * *** * * * * . */
/* | * * * *** * * * * ** * * ** . */
/* | * . */
/* | *** ** ** * * * * ** *. */
/* | * * . */
/* | * *** ** * * * * * *. */
/* | * * * ** * * * * * . */
/* | * ** * *** * . */
/* | * * * ** * . */
/* | * * * * * * * . */
/* | * * * * * ** * * ** . */
/* | ** ** ** * * * . */
/* | ** **** * * * . */
/* | * * * * . */
/* | * * * . */
/* | * * . */
/* | * * . */
/* | * * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | . */
/* |-------------------------------------------------------------------------> */
/* 0 1 X */
/* n */
/* */
/* */
/* La dynamique de Markus, utilise la meme suite, */
/* mais le taux de croissance 'R' change a chaque */
/* iteration suivant une certaine loi en prenant */
/* deux valeurs possibles 'R1' et 'R2'. J'ai etendu */
/* cela a 3 valeurs 'R1', 'R2' et 'R3'. Ainsi, la loi */
/* de variation pourra etre : */
/* */
/* R1 --> R2 --> R3 --> R1 --> R2 --> R3 --> ... */
/* */
/* Le triplet (R1,R2,R3) est considere comme etant */
/* les coordonnees {X,Y,Z} d'un point d'un espace */
/* tridimensionnel, dont le coloriage est fonction */
/* du caractere chaotique de la suite 'X' associe. */
/* Le critere de chaos est donne par l'exposant de */
/* Lyapunov ; lorsque celui-ci est negatif, la suite */
/* 'X' est stable, alors que lorsqu'il est positif, */
/* cette derniere est chaotique. Ainsi, seront obtenues */
/* des coupes du type : */
/* */
/* */
/* #########################*o*#################################### */
/* #########################*o*#################################### */
/* #########################o**#################################### */
/* ########################*-*#######*############################# */
/* ########################*o*#######*############################# */
/* #######################*o**##################################### */
/* #######################*o*###################################### */
/* ######################*o**###################################### */
/* ######################*-**#######*############################## */
/* #####################**o*########o###########################*## */
/* #####################*+**########*############################## */
/* ####################**o*######################################## */
/* ####################*o**######################################## */
/* ###################**o**######################################## */
/* ###################*o**#########*####################*****###### */
/* ##################**o**#########*############################### */
/* #######***o***####*o**########################################## */
/* #################**o**########################################## */
/* ################**o**###############################********o+*o */
/* ################*oo**##########*###############**oo+o*****###### */
/* ###############**+***##########o###############**############### */
/* ###############*oo**###########*################################ */
/* ##############**:***############################################ */
/* ########*####**oo**############################################# */
/* *********###**o+***############################################# */
/* ***ooo+o####**+o**############*################################# */
/* +oo****####**oo***############o################################# */
/* ****######**o+***#############*################################# */
/* #########***+o**##############*################################# */
/* ########***oo***################################################ */
/* #######***oo***##############*################################## */
/* ######***o-o***##############*################################## */
/* */
/* */
/* ou en "negatif" : */
/* */
/* */
/* . . */
/* */
/* . */
/* . . . */
/* . */
/* . : */
/* . : */
/* . . */
/* . . */
/* . */
/* . */
/* . . . */
/* . . */
/* . - . */
/* . . */
/* . . . */
/* . : */
/* . .. . . */
/* .. ... .. . */
/* ... ....... + */
/* ..... ...:.... . */
/* ..:...........::-.. . */
/* ....:::.:::-:+:.. . */
/* .........::.. . */
/* ......:... : . */
/* ........ : */
/* ...+.. . */
/* ...:.. . */
/* ...:.. . - */
/* ..... : . . */
/* ...... : .. */
/* ..:.. . .. */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_ESPACE_LYAPUNOV_COMPLEXE_11: */
#define FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01(x,precision) \
NEUT(x) \
/* Choix d'une precision egale a celle de la machine telle qu'elle est programmee. */
#nodefine FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(x,precision) \
DIVI(ARRO(MUL2(x,FLOT(precision))) \
,FLOT(precision) \
) \
/* Choix d'une precision variable definie par 'precision' qui sera en general une puissance */ \
/* de 10... */ \
/* */ \
/* Le 20030222103003, 'FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(...)' */ \
/* est passe de 'define' a 'nodefine' afin de ne pas etre recupere par le processus */ \
/* 'v $xcc/cpp$Z _VERSION_'. */
#ifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */
DEFV(Common,DEFV(Logical,_____FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01));
#Aifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */
#Eifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */
#ifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */
DEFV(Common,DEFV(Logical,_____FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02));
#Aifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */
#Eifdef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */
DEFV(Common,DEFV(Int,ZINT(espace_de_Lyapunov_____precision,CENT_MILLE)));
/* Definition de la precision des calculs en 'VERSION_02'... */
#define FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(x) \
FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01(x,espace_de_Lyapunov_____precision) \
/* Choix d'une precision courante a adopter pour les calculs. Cette fonction devra etre */ \
/* appliquee a toute valeur flottante : les variables, mais aussi malheureusement toutes */ \
/* les expressions intermediaires. Pour simplifier, on pourra ecrire peut-etre : */ \
/* */ \
/* #define DYNAMIQUE_DE_VERHULST_REELLE(...) \ */ \
/* FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(MUL2(... \ */ \
/* ... \ */ \
/* ) \ */ \
/* ) \ */ \
/* */ \
/* #define DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(...) \ */ \
/* FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(MUL2(... \ */ \
/* ... \ */ \
/* ) \ */ \
/* ) \ */ \
/* */ \
/* la fonction de precision portant globalement sur la formule, et non pas sur tous les */ \
/* resultats intermediaires... */
#define QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(taux_de_croissance) \
IFEQ(ITb0(suite_des_taux_de_croissance \
,INDX(numero_de_l_iteration,PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV) \
) \
,taux_de_croissance \
)
#define TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV \
CON07(QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R1 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R2_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R2 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R3_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R3 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R4_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R4 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R5_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R5 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R6_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R6 \
,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R7_DANS_L_ESPACE_DE_LYAPUNOV) \
,IFespace_de_Lyapunov_____R7 \
,ABSO(ITb0(suite_des_taux_de_croissance \
,INDX(numero_de_l_iteration,PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV) \
) \
) \
)
/* Fonction de selection d'un taux de croissance en fonction de l'indice courant 'n' de */
/* de l'iteration. On choisit pour : */
/* */
/* R1 : la coordonnee 'X' dans le plan complexe, */
/* R2 : la coordonnee 'Y' dans le plan complexe, */
/* R3 : la coordonnee 'Z' Argument. */
/* */
/* Le 20101103112420 la valeur 'FLOT__UNDEF' qui etait forcee jusqu'a cette date dans le */
/* cas ou aucun code {R1,R2,R3} n'etait reconnu a ete remplace par la valeur courante de */
/* 'suite_des_taux_de_croissance' afin de permettre ainsi des taux de croissance absolument */
/* quelconques. On notera que l'on prend la valeur absolue car, en effet, un taux de */
/* croissance est evidemment positif ; malgre cela, il est suggere dans ce cas de mettre */
/* dans 'suite_des_taux_de_croissance' des valeurs negatives afin d'eviter des confusions */
/* avec {R1,R2,R3}... */
/* */
/* Le 20151006085649 a ete introduite 'CON03(...)' afin d'alleger la syntaxe et d'anticiper */
/* l'introduction de 'CON05(...)'. */
/* */
/* L'introduction de 'CON05(...)' a eu lieu le 20151006091325. */
/* */
/* Le 20151007091822, 'CON05(...)' a ete remplace par 'CON07(...)'. On notera que */
/* l'utilisation d'un nombre impair de coordonnees {R1,R2,R3,R4,R5,R6,R7} est destine a */
/* faciliter l'usage fait dans 'v $xiirc/.LYAP.C3.1.$U .xci.valeurs_trig.X'... */
DEFV(Common,DEFV(Float,ZINT(espace_de_Lyapunov_____constante_de_complementation,FU)));
/* Constante introduite le 20160721163549 lorsque je me suis rendu compte que cette */
/* constante pouvait varier jusqu'a 1.1111111... */
#define CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn,taux_de_croissance) \
Bblock \
DEFV(complexe,suite_Pn_etendue); \
/* Pour calculer l'eventuelle suite etendue... */ \
\
Test(IFEQ(IFespace_de_Lyapunov_____exposant,FU)) \
Bblock \
Cegal(suite_Pn_etendue \
,suite_Pn \
); \
/* Optimisation pour un exposant egal a 1... */ \
Eblock \
ATes \
Bblock \
Cinitialisation(suite_Pn_etendue \
,PUIX(Reelle(suite_Pn),IFespace_de_Lyapunov_____exposant) \
,NEUT(Imaginaire(suite_Pn)) \
); \
Eblock \
ETes \
\
UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C \
(VRAI \
,BLOC( \
Bblock \
Cinitialisation(suite_Pn \
,MUL2(taux_de_croissance \
,MUL2(Reelle(suite_Pn_etendue) \
,SOUS(espace_de_Lyapunov_____constante_de_complementation \
,Reelle(suite_Pn_etendue) \
) \
) \
) \
,NEUT(Imaginaire(suite_Pn_etendue)) \
); \
/* Calcul itere de la suite : */ \
/* */ \
/* X = R.X .(1 - X ) */ \
/* n+1 n n */ \
/* */ \
/* L'utilisation possible du 'GooF' a ete introduit le 20181108123454 et on notera qu'elle */ \
/* est controlee par 'C_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique...' */ \
/* meme si on semble etre dans les reels, mais en fait il s'agit de complexes a parties */ \
/* imaginaires nulles... */ \
/* */ \
/* Le 20151031085602, la suite a ete generalisee de la facon suivante : */ \
/* */ \
/* p p */ \
/* X = R.X .(1 - X ) */ \
/* n+1 n n */ \
/* */ \
/* ou 'p' designe un certain exposant (evidemment egal a 1 par defaut...). */ \
Eblock \
) \
); \
Eblock \
/* Procedure introduite le 20151030100641... */
#define CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn,taux_de_croissance) \
Bblock \
DEFV(complexe,point_manoeuvre_1); \
DEFV(complexe,point_manoeuvre_2); \
/* Points complexes de maneuvre lors de l'iteration. */ \
DEFV(complexe,suite_Pn_etendue); \
/* Pour calculer l'eventuelle suite etendue... */ \
\
aCpuissance(suite_Pn_etendue \
,suite_Pn \
,IFespace_de_Lyapunov_____exposant \
); \
/* Le 20151031085602, la suite a ete generalisee de la facon suivante : */ \
/* */ \
/* p p */ \
/* Z = R.Z .(1 - Z ) */ \
/* n+1 n n */ \
/* */ \
/* ou 'p' designe un certain exposant (evidemment egal a 1 par defaut...). */ \
\
aCforme_lineaire(point_manoeuvre_1 \
,NEGA(FU) \
,suite_Pn_etendue \
,espace_de_Lyapunov_____constante_de_complementation \
); \
/* Calcul de : */ \
/* */ \
/* 1 - Z = -Z + 1 */ \
/* n n */ \
/* */ \
\
aCproduit(point_manoeuvre_2 \
,suite_Pn_etendue \
,point_manoeuvre_1 \
); \
/* Calcul de : */ \
/* */ \
/* Z .(1 - Z ) */ \
/* n n */ \
/* */ \
\
aCforme_lineaire(suite_Pn \
,taux_de_croissance \
,point_manoeuvre_2 \
,FZERO \
); \
/* Calcul de : */ \
/* */ \
/* Z = R.Z .(1 - Z ) */ \
/* n+1 n n */ \
/* */ \
Eblock \
/* Procedure introduite le 20151030100641... */
#define CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn,derivee_suite_Pn,taux_de_croissance) \
Bblock \
Test(IL_FAUT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees)) \
/* Test introduit le 20151030110739... */ \
Bblock \
EGAL(Reelle(derivee_suite_Pn) \
,MUL2(taux_de_croissance \
,SOUS(espace_de_Lyapunov_____constante_de_complementation,DOUB(Reelle(suite_Pn))) \
) \
); \
/* Calcul de la derivee de la suite : */ \
/* */ \
/* d(X ) = R.(1 - 2.X ) */ \
/* n+1 n+1 */ \
/* */ \
Eblock \
ATes \
Bblock \
DEFV(complexe,suite_Pn_a_gauche); \
DEFV(complexe,suite_Pn_a_droite); \
\
Cinitialisation(suite_Pn_a_gauche \
,SOUS(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
,NEUT(Imaginaire(suite_Pn)) \
); \
Cinitialisation(suite_Pn_a_droite \
,ADD2(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
,NEUT(Imaginaire(suite_Pn)) \
); \
\
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn_a_gauche \
,taux_de_croissance \
); \
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn_a_droite \
,taux_de_croissance \
); \
\
EGAL(Reelle(derivee_suite_Pn) \
,DERIVATION_PARTIELLE(Reelle(suite_Pn_a_gauche) \
,Reelle(suite_Pn_a_droite) \
,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
) \
); \
/* Calcul de la derivee de la suite par des differences finies... */ \
Eblock \
ETes \
Eblock \
/* Procedure introduite le 20151030100641... */
#define CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn,derivee_suite_Pn,taux_de_croissance) \
Bblock \
Test(IL_FAUT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees)) \
/* Test introduit le 20151030110739... */ \
Bblock \
DEFV(complexe,point_manoeuvre); \
/* Point complexe de maneuvre lors de l'iteration. */ \
\
aCforme_lineaire(point_manoeuvre \
,NEGA(FDEUX) \
,suite_Pn \
,espace_de_Lyapunov_____constante_de_complementation \
); \
/* Calcul de : */ \
/* */ \
/* 1 - 2.Z = -2.Z + 1 */ \
/* n+1 n+1 */ \
/* */ \
\
aCforme_lineaire(derivee_suite_Pn \
,taux_de_croissance \
,point_manoeuvre \
,FZERO \
); \
/* Calcul de : */ \
/* */ \
/* d(Z ) = R.(1 - 2.Z ) */ \
/* n+1 n+1 */ \
/* */ \
Eblock \
ATes \
Bblock \
DEFV(complexe,suite_Pn_a_gauche); \
DEFV(complexe,suite_Pn_a_droite); \
\
Cinitialisation(suite_Pn_a_gauche \
,SOUS(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
,SOUS(Imaginaire(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
); \
Cinitialisation(suite_Pn_a_droite \
,ADD2(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
,ADD2(Imaginaire(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
); \
\
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn_a_gauche \
,taux_de_croissance \
); \
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn_a_droite \
,taux_de_croissance \
); \
\
Cinitialisation(derivee_suite_Pn \
,DERIVATION_PARTIELLE(Reelle(suite_Pn_a_gauche) \
,Reelle(suite_Pn_a_droite) \
,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
) \
,DERIVATION_PARTIELLE(Imaginaire(suite_Pn_a_gauche) \
,Imaginaire(suite_Pn_a_droite) \
,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees) \
) \
); \
/* Calcul de la derivee de la suite par des differences finies... */ \
Eblock \
ETes \
Eblock \
/* Procedure introduite le 20151030100641... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " F L O T T A N T " D E L ' E S P A C E D E V E R H U S L T - L Y A P U N O V */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionF
DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____utiliser_la_dynamique_etendue,FAUX)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____exposant,FU)));
/* Le 20151031085602 a ete introduite la possibilite d'utiliser une dynamique plus */
/* compliquee que 'R.Z.(1-Z)'... */
DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees,VRAI)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees,tgEPSILON)));
/* Le 20151030110739 a ete introduite la possibilite de calculer les derviees par des */
/* differences finies dans le but de pouvoir compliquer un peu la definition de l'iteration */
/* de Verhulst. */
DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____faire_une_rotation_tridimensionnelle,FAUX)));
/* Introduit le 20210815103934... */
/* */
/* On notera le 20210815121225 que cela ne fait pas en realite une rotation */
/* tridimensionnelle (sauf peut-etre pour de tres petits angles) et ce a cause du */
/* fait que la dynamique de Verhulst est chaotique et qu'alors la moindre petite */
/* modification sur une valeur initiale (ou intermediaire), ce qui a necessairement */
/* lieu de la rotation, a des consequences macroscopiques sur la suite du processus. */
/* Cela fut en fait introduit pour le plaisir... */
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R4,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R5,FZERO)));
/* Les parametres 'R4' et 'R5' ont ete introduits le 20151006091325... */
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R6,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R7,FZERO)));
/* Les parametres 'R6' et 'R7' ont ete introduits le 20151007091822... */
DEFV(Common,DEFV(FonctionF,POINTERF(IFespace_de_Lyapunov(imageR
,Zf
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(valeur_initiale_P0_de_Pn)
,suite_des_taux_de_croissance
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(imageF,imageR));
/* Image Resultat a generer en flottant. */
DEFV(Argument,DEFV(Float,Zf));
/* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la tranche verticale */
/* dans laquelle on genere la coupe bi-dimensionnelle de l'espace de Lyapunov. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(valeur_initiale_P0_de_Pn)));
/* Nombre complexe "generateur" de l'espace de Lyapunov que l'on veut calculer. On notera */
/* que si ce nombre complexe se reduit a sa partie reelle, les calculs sont optimises... */
DEFV(Argument,DEFV(Float,DTb0(suite_des_taux_de_croissance)));
/* Donne la suite des taux de croissance. Ce tableau a autant d'elements qu'il est prevu */
/* d'iterations, soit 'nombre_d_iterations'... */
/* */
/* Le 20101103112420, le type de 'suite_des_taux_de_croissance' est passe de 'Int' a */
/* 'Float' afin que ce vecteur puisse contenir des codes de taux de croissance (par */
/* exemple 'TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV'), mais aussi les taux de */
/* croissance eux-memes, auquel cas il est suggere d'utiliser des valeurs negatives, les */
/* taux etant evidemment positifs, dont on prendra donc la valeur absolue ; ainsi il n'y */
/* aura pas de confusions entre les codes {R1,R2,R3} et ces valeurs specifiques... */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFinitialisation(imageR,FZERO));
/* Initialisation, on ne sait jamais... */
BSaveModifyVariable(Logical
,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
,COND(IL_FAUT(IFespace_de_Lyapunov_____utiliser_la_dynamique_etendue)
,FAUX
,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
)
);
/* Ainsi, on force le calcul par differences finies des derivees pour la dynamique */
/* etendue, ce qui est logique puisque l'on ne connait pas a priori la derivee formelle. */
begin_image
Bblock
#define NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz \
NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
/* Afin de raccourcir certaines lignes ci-dessous... */
F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
,BLOC(Bblock
Cegal(element_courant_de_la_suite_Pn,INDIRECT(valeur_initiale_P0_de_Pn));
/* Recuperation du nombre complexe "generateur"... */
Eblock
)
,BLOC(Bblock
DEFV(Float,INIT(IFespace_de_Lyapunov_____R1,X_IMAGE_PLAN(X)));
DEFV(Float,INIT(IFespace_de_Lyapunov_____R2,Y_IMAGE_PLAN(Y)));
DEFV(Float,INIT(IFespace_de_Lyapunov_____R3,Zf));
/* Introduit le 20210815100953 afin de permettre des transformations tridimensionnelles */
/* des coordonnees {X,Y,Z}... */
Test(IL_FAUT(IFespace_de_Lyapunov_____faire_une_rotation_tridimensionnelle))
/* Possibilite introduite le 20210815103934... */
Bblock
DEFV(Float,INIT(rotation_de_R1
,TRANSFORMATION_GEOMETRIQUE_3D_Fx
(IFespace_de_Lyapunov_____R1
,IFespace_de_Lyapunov_____R2
,IFespace_de_Lyapunov_____R3
,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
)
)
);
DEFV(Float,INIT(rotation_de_R2
,TRANSFORMATION_GEOMETRIQUE_3D_Fy
(IFespace_de_Lyapunov_____R1
,IFespace_de_Lyapunov_____R2
,IFespace_de_Lyapunov_____R3
,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
)
)
);
DEFV(Float,INIT(rotation_de_R3
,TRANSFORMATION_GEOMETRIQUE_3D_Fz
(IFespace_de_Lyapunov_____R1
,IFespace_de_Lyapunov_____R2
,IFespace_de_Lyapunov_____R3
,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
)
)
);
EGAL(IFespace_de_Lyapunov_____R1,rotation_de_R1);
EGAL(IFespace_de_Lyapunov_____R2,rotation_de_R2);
EGAL(IFespace_de_Lyapunov_____R3,rotation_de_R3);
/* Rotation de {R1,R2,R3} introduite le 20210815103934... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IZEQ(Imaginaire(INDIRECT(valeur_initiale_P0_de_Pn))))
Bblock
/* Cas ou le generateur est un nombre Reel (c'est-a-dire un nombre complexe dont la partie */
/* imaginaire est nulle...), on optimise (du jamais vu...) : */
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
(element_courant_de_la_suite_Pn
,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
);
CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
(element_courant_de_la_suite_Pn
,derivee_de_la_suite_Pn
,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
);
Eblock
ATes
Bblock
/* Cas ou le generateur est un nombre complexe (c'est-a-dire un nombre complexe dont la */
/* partie imaginaire n'est pas nulle...) : */
CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
(element_courant_de_la_suite_Pn
,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
);
CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
(element_courant_de_la_suite_Pn
,derivee_de_la_suite_Pn
,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
);
Eblock
ETes
Eblock
)
);
#undef NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
Eblock
end_image
ESaveModifyVariable(Logical
,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
);
RETIF(imageR);
Eblock
EFonctionF
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " S T A N D A R D " D E L ' E S P A C E D E V E R H U S L T - L Y A P U N O V */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Iespace_de_Lyapunov(imageR
,Zf
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(valeur_initiale_P0_de_Pn)
,suite_des_taux_de_croissance
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer en "standard". */
DEFV(Argument,DEFV(Float,Zf));
/* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la tranche verticale */
/* dans laquelle on genere la coupe bi-dimensionnelle de l'espace de Lyapunov. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(valeur_initiale_P0_de_Pn)));
/* Nombre complexe "generateur" de l'espace de Lyapunov que l'on veut calculer. On notera */
/* que si ce nombre complexe se reduit a sa partie reelle, les calculs sont optimises... */
DEFV(Argument,DEFV(Float,DTb0(suite_des_taux_de_croissance)));
/* Donne la suite des taux de croissance. Ce tableau a autant d'elements qu'il est prevu */
/* d'iterations, soit 'nombre_d_iterations'... */
/* */
/* Le 20101103112420, le type de 'suite_des_taux_de_croissance' est passe de 'Int' a */
/* 'Float' afin que ce vecteur puisse contenir des codes de taux de croissance (par */
/* exemple 'TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV'), mais aussi les taux de */
/* croissance eux-memes, auquel cas il est suggere d'utiliser des valeurs negatives, les */
/* taux etant evidemment positifs, dont on prendra donc la valeur absolue ; ainsi il n'y */
/* aura pas de confusions entre les codes {R1,R2,R3} et ces valeurs specifiques... */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le */
/* fichier 'v $ximcf/iterations$DEF'). */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
/* Cet indicateur logique controle la visualisation des zones des parties stables. Il */
/* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties stables. */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
/* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il */
/* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel */
/* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux */
/* parties chaotiques. */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
/* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une */
/* inversion video du champ genere (pour la valeur -1.0). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Int,INIT(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
/* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la */
/* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement */
/* elles), le mode utilise peut etre different de celui qui a ete demande... */
BDEFV(imageF,coupe_dans_l_espace_de_Lyapunov);
/* Coupe bidimensionnelle dans l'espace tridimensionnel de Lyapunov. */
/*..............................................................................................................................*/
MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
/* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel... */
CALS(IFespace_de_Lyapunov(coupe_dans_l_espace_de_Lyapunov
,Zf
,coin_bas_gauche
,coin_haut_droite
,valeur_initiale_P0_de_Pn
,suite_des_taux_de_croissance
,nombre_d_iterations
,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
,visualiser_les_exposants_negatifs
,visualiser_les_exposants_positifs
,facteur_multiplicatif
)
);
/* Calcul de l'espace de Lyapunov en "flottant", et donc sans renormalisation... */
CALS(Ifloat_std_avec_renormalisation(imageR,coupe_dans_l_espace_de_Lyapunov));
/* Et enfin, conversion du champ flottant en une image avec renormalisation. Mais on fera */
/* tres ATTENTION au fait que cet 'Ifloat_std_avec_renormalisation(...)' est dependant du */
/* contenu de l'image courante uniquement. Dans ces conditions, lors du calcul d'une suite */
/* d'images, par exemple a l'aide de 'v $xrk/lyapunov.01$K', les extrema utilises par cette */
/* renormalisation pourront varier d'une image a une autre. C'est ceci qui explique le */
/* phenomene de "pompage" des niveaux que l'on observe dans la sequence suivante : */
/* */
/* xivPdf 2 1 / 009320_009447 */
/* */
/* Je vois difficilement comment eviter ce phenomene, qui va jusqu'a donner l'impression */
/* de retour en arriere dans le zoom precedent. On pourrait bien sur utiliser directement */
/* la fonction 'IFespace_de_Lyapunov(...)', et faire dans le programme appelant l'operation */
/* de renormalisation suivant les extrema globaux pour l'ensemble des images, mais cela */
/* serait d'une grande lourdeur... */
EDEFV(imageF,coupe_dans_l_espace_de_Lyapunov);
/* Coupe bidimensionnelle dans l'espace tridimensionnel de Lyapunov. */
RETI(imageR);
Eblock
EFonctionP
#undef CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
#undef CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
#undef CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
#undef CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
#undef TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
#undef QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
#undef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV
#Undef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02
/* Le 20030222103003, 'FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(...)' */
/* est passe de 'undef' a 'Undef' afin de ne pas etre recupere par le processus */
/* 'v $xcc/cpp$Z _VERSION_'. */
#undef FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01
#undef F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C
#undef TRES_PETIT_EXPOSANT_DE_LYAPUNOV
#undef PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV
#undef COMMENT_CALCULER_LA_DERIVEE
#undef MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV
#undef VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV
#undef BVARIABLES_F_EXPOSANT_LYAPUNOV
#undef BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N E S U I T E Q U E L C O N Q U E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant \
/* Definition des variables communes a toutes les fonctions calculant une suite quelconque */ \
/* dans le plan Complexe... */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */
#define BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C \
/* Definition des variables communes a toutes les fonctions calculant une suite quelconque */ \
/* dans le plan Complexe... */ \
BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(complexe,point_courant); \
/* Point complexe courant 'C' dans la fenetre. */
#define F_ITERATION_QUELCONQUE_DANS_C(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut) \
Bblock \
DEFV(Int,INIT(numero_de_l_iteration,UNDEF)); \
/* Indice 'n' de la suite 'X'... */ \
DEFV(complexe,element_courant_de_la_suite_Pn); \
/* Element courant Z de la suite. */ \
/* n */ \
BLOC(initialisation); \
/* Initialisation de la suite definissant le systeme dynamique... */ \
\
DoIn(numero_de_l_iteration \
,premiere_iteration_effective \
,LSTX(premiere_iteration_absolue,nombre_d_iterations) \
,I \
) \
Bblock \
BLOC(iteration); \
/* Calcul du systeme dynamique par iteration du calcul de la suite... */ \
\
Test(IL_FAUT(test_defaut)) \
Bblock \
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn \
,iterations_dans_C_HC_HHC_____epsilon \
); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au */ \
/* carre lors de l'eventuelle iteration suivante... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock \
EDoI \
\
storeJ_point(element_courant_de_la_suite_Pn \
,imageR \
,X,Y \
); \
/* Generation de l'image "complexe"... */ \
Eblock \
/* Calcul general d'une suite quelconque dans le plan complexe... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S C A L C U L A N T */
/* U N E F O N C T I O N D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionJ_I_FONCTION_C POINTERJ
/* Introduit le 20040520121238. */
#define GENERE__FonctionJ_I_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom,editer,simp) \
/* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees */ \
/* a la recuperation automatique des fichiers d'arguments ; on trouvera donc : */ \
/* */ \
/* GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction) */ \
/* */ \
/* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre */ \
/* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f'). */ \
/* */ \
/* Les arguments {alpha,beta_,gamma,delta} ont ete introduits le 20091021152725 suite a */ \
/* l'extension 'v $ximcd/operator$FON Cforme_homographique'. En general, ils vaudront : */ \
/* definie par : */ \
/* */ \
/* alpha = 1 */ \
/* beta_ = 0 */ \
/* gamma = 0 */ \
/* delta = 1 */ \
/* */ \
/* afin que la transformation homographique soit neutre... */ \
/* */ \
/* Les arguments {nom,editer} ont ete introduits le 20120121174948... */ \
/* */ \
/* L'argument {simp} (pour "SIMPlifier") a ete introduit le 20120124091005... */ \
DEFV(FonctionJ,POINTERJ(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(imageJ,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
begin_image \
Bblock \
DEFV(complexe,point_courant_transforme); \
\
INITIALISATION_DU_POINT_COURANT_DANS_C; \
/* Initialisation du "point Courant" 'C'. */ \
\
Cforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta); \
/* Transformation homographique du "point Courant" 'C'. Ceci fut introduit le 20091021152725 */ \
/* afin de pouvoir representer la fonction 'exp(1/z)' en utilisant directement la fonction */ \
/* 'fFCexponentielle_neperienne(...)' et en appliquant la transformation homographique */ \
/* definie par : */ \
/* */ \
/* alpha = 0 */ \
/* beta_ = 1 */ \
/* gamma = 1 */ \
/* delta = 0 */ \
/* */ \
/* astucieux... */ \
\
CALS(Nfonction(point_courant_transforme)); \
/* Application de la transformation... */ \
\
Test(IL_FAUT(editer)) \
Bblock \
Test(IL_NE_FAUT_PAS(simp)) \
/* Test introduit le 20120124091005... */ \
Bblock \
CAL3(Prme5("%s(%+.^^^,%+.^^^)=(%+.^^^,%+.^^^)\n" \
,nom \
,Reelle(point_courant_transforme),Imaginaire(point_courant_transforme) \
,Reelle(Vfonction),Imaginaire(Vfonction) \
) \
); \
/* Possibilite introduite le 20120121174948... */ \
Eblock \
ATes \
Bblock \
CAL3(Prme4("%+.^^^ %+.^^^ %+.^^^ %+.^^^\n" \
,Reelle(point_courant_transforme),Imaginaire(point_courant_transforme) \
,Reelle(Vfonction),Imaginaire(Vfonction) \
) \
); \
/* Possibilite introduite le 20120124091005 pour simplifier le traitement de ces sorties... */ \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
storeJ_point(Vfonction \
,imageR \
,X,Y \
); \
/* Generation de l'image "complexe"... */ \
Eblock \
end_image \
\
RETIJ(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' gamma ' */
/* D A N S L E P L A N C O M P L E X E A V E C L E P R O L O N G E M E N T A N A L Y T I Q U E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_gamma_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_gamma_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_prolongement_analytique_gamma_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"gamma" /* Common,DEFV(Fonction,) : \ */
,IJfonction_prolongement_analytique_gamma_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_prolongement_analytique_gamma_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " F L O T T A N T " D E L A F O N C T I O N ' zeta ' D E R I E M A N N */
/* D A N S L E P L A N C O M P L E X E A V E C L A S E R I E D ' E U L E R */
/* S U I V A N T U N P R O C E S S U S L I N E A I R E E N T E M P S : */
/* */
/* */
/* Definition : */
/* */
/* La fonction 'zeta' de Riemann est definie */
/* dans le plan Complexe par : */
/* */
/* 1 1 1 */
/* zeta(z) = ---- + ---- + ... + ---- + ... */
/* z z z */
/* 1 2 n */
/* */
/* ce qui peut se reecrire : */
/* */
/* -z -z -z */
/* zeta(z) = 1 + 2 + ... + n + ... */
/* */
/* */
/* n=+infini */
/* _______ */
/* \ */
/* \ -z */
/* zeta(z) = / n */
/* /______ */
/* */
/* n=1 */
/* */
/* sachant que : */
/* */
/* -z -z.Log(n) */
/* n = e */
/* */
/* ou en posant : */
/* */
/* x = R(z) */
/* y = I(z) */
/* */
/* -z -(x + i.y).Log(n) */
/* n = e */
/* */
/* -z -x.Log(n) -i.y.Log(n) */
/* n = e .e */
/* */
/* -z -x.Log(n) */
/* n = e .[cos(-y.Log(n)) + i.sin(-y.Log(n))] */
/* */
/* d'ou : */
/* */
/* n=+infini */
/* _______ */
/* \ */
/* \ -x.Log(n) */
/* zeta(z) = / e .[cos(-y.Log(n)) + i.sin(-y.Log(n))] */
/* /______ */
/* */
/* n=1 */
/* */
/* ou encore : */
/* */
/* n=+infini */
/* _______ */
/* \ */
/* \ -R(z).Log(n) */
/* zeta(z) = / e .[cos(-I(z).Log(n)) + i.sin(-I(z).Log(n))] */
/* /______ */
/* */
/* n=1 */
/* */
/* et nous nous contenterons des 'N' premiers termes de la suite, */
/* c'est-a-dire que nous n'irons pas jusqu'a l'infini... */
/* */
/* */
/* La fonction 'zeta' de Riemann possede un */
/* pole de residu 1 : le nombre z=1. Elle possede */
/* une infinite de zeros "triviaux" qui sont les */
/* nombres entiers negatifs et pairs. Elle possede */
/* aussi une infinite de zeros non triviaux de la */
/* forme : */
/* */
/* 1 */
/* z = --- + h.i */
/* 2 */
/* */
/* sachant que le fait que la partie Reelle soit */
/* constante (et egale a 1/2) constitue ce que l'on */
/* appelle l'hypothese de Riemann (non encore demontree */
/* a la date de 19990607172302). Voici les 6 premieres */
/* valeurs positives de 'h' : */
/* */
/* 14.134725... */
/* 21.02... */
/* 25.01... */
/* 30.42... */
/* 32.93... */
/* 37.58... */
/* */
/* la dixieme etant egale a 49.773832... */
/* */
/* */
/* Donnons quelques valeurs particulieres de */
/* la fonction 'zeta' de Riemann : */
/* */
/* 2.n-1 */
/* 2 2.n */
/* zeta(2.n) = --------.p B */
/* (2.n)! n */
/* */
/* ou 'Bn' designe les nombres de Bernoulli */
/* et 'p' le nombre 'pi'. On a en particulier : */
/* */
/* 2 */
/* p */
/* zeta(2) = ---- */
/* 6 */
/* */
/* 4 */
/* p */
/* zeta(4) = ---- */
/* 90 */
/* */
/* Enfin, on notera que : */
/* */
/* zeta(3) = 1.20205... */
/* */
/* ce qui va permettre de faire des tests de */
/* validite... */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(FonctionJ,POINTERJ(IJfonction_serie_zeta_dans_C(imageR
,imageA
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,numero_de_la_premiere_iteration
,nombre_d_iterations
)
)
)
)
DEFV(Argument,DEFV(imageJ,imageR));
/* Image Resultat a generer. */
DEFV(Argument,DEFV(imageJ,imageA));
/* Image Argument servant a initialiser le processus, ce qui autorise donc la programmation */
/* d'un calcul iteratif en un temps lineaire (voir par exemple 'v $xrc/zeta.02$K') ; dans */
/* ces conditions : */
/* */
/* imageA : correspond a un nombre d'iterations inferieur a 'nombre_d_iterations', */
/* imageR : correspondra a 'nombre_d_iterations', et en fait seul les iterations "comprises" */
/* entre 'imageA' et 'imageR' seront calculees... */
/* */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,numero_de_la_premiere_iteration));
/* Numero de la premiere iteration demandee qui, notons le, n'est pas necessairement la */
/* valeur 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN', mais bien plutot une valeur */
/* superieure, ce qui permet la mise en place de calculs "progressifs" (voir a ce propos */
/* les commentaires de 'imageR' et 'imageA'). */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. Par contre 'nombre_d_iterations' lui est compte a partir */
/* de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN', sachant, bien entendu, que les */
/* premieres iterations ne seront pas obligatoirement calculees, car elles pourront etre */
/* recuperees d'un calcul anterieur... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C
/*..............................................................................................................................*/
/* ATTENTION, on ne fait pas : */
/* */
/* DEFV(complexe,valeur_initiale); */
/* Cegal(valeur_initiale,C_____nombre_complexe__0__0); */
/* CALS(IJinitialisation(imageR,ADRESSE(valeur_initiale))); */
/* */
/* au cas ou les images 'imageA' et 'imageR' seraient equivalentes... */
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
Test(IFLE(X_COIN_BAS_GAUCHE,FU))
Bblock
PRINT_ATTENTION("la fenetre de calcul coupe la droite x=1, la serie ne converge donc pas dans toute la fenetre");
/* A ce propos, 'v $ximcf/operator$FON fFCzeta_sommation_Euler_MacLaurin' qui propose un */
/* prolongement analytique de la serie utilisee ici, et qui semble fonctionner correctement. */
Eblock
ATes
Bblock
Eblock
ETes
begin_image
Bblock
F_ITERATION_QUELCONQUE_DANS_C(PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN
,numero_de_la_premiere_iteration
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_C;
/* Initialisation du "point Courant" 'C'. */
Cegal(element_courant_de_la_suite_Pn
,loadJ_point(imageA
,X,Y
)
);
/* Initialisation de l'approximation de la fonction 'zeta(c)'. Par exemple lorsque l'on */
/* sera sur la premiere iteration : */
/* */
/* numero_de_la_premiere_iteration == PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN */
/* */
/* on fera en general (voir 'Ifonction_serie_zeta_dans_C(...)') : */
/* */
/* zeta(C) = 0 */
/* */
/* Pour les iterations suivantes, on pourra ainsi cumuler les resultats des iterations */
/* precedentes... */
Eblock
)
,BLOC(Bblock
DEFV(Float,INIT(moins_Log_de_n,NEGA(LOGX(numero_de_l_iteration))));
/* Oppose du logarithme neperien du numero d'iteration courant 'n'. */
DEFV(complexe,point_manoeuvre_1);
DEFV(complexe,point_manoeuvre_2);
/* Points complexes de maneuvre lors de l'iteration. */
Cnegation(point_manoeuvre_1
,point_courant
);
/* Calcul de : */
/* */
/* z = -z = -(x + i.y) */
/* 1 */
/* */
/* ou {x,y} designe le nombre complexe 'C' courant. */
aCexponentielle(point_manoeuvre_2
,numero_de_l_iteration
,point_manoeuvre_1
);
/* Calcul de : */
/* */
/* -x.Log(n) */
/* z = e .[cos(-y.Log(n)) + i.sin(-y.Log(n))] */
/* 2 */
/* */
/* ATTENTION, on notera de plus que pour les valeurs de 'x' negatives, l'exponentielle */
/* ci-dessus peut prendre tres "facilement" des valeurs enormes. A titre d'illustration */
/* de cela, lorsque dans la fenetre de calcul, il y a des points d'abscisses negatives, */
/* c'est la colonne de points la plus a gauche (donc contenant en valeur absolue les plus */
/* grandes abscisses negatives) qui domine completement tout le reste du champ qui se */
/* retrouve (suite a la quantification en octets des niveaux) pratiquement uniforme, alors */
/* que cette colonne de gauche presente des "details". Cela peut se voir (et cela s'est vu */
/* le 19990602093737) avec le pave [-33,-31]x[-32,-30] ; on trouve alors les valeurs */
/* suivantes : */
/* */
/* Zn=(0.000000,0.000000) */
/* */
/* n=1 */
/* -Log(n)=0.000000 */
/* {x,y}=(-33.000000,-32.000000) */
/* m2=(1.000000,0.000000) */
/* Zn=(1.000000,0.000000) */
/* */
/* n=2 */
/* -Log(n)=-0.693147 */
/* {x,y}=(-33.000000,-32.000000) */
/* m2=(-8436063190.993355,-1618583989.913671) */
/* Zn=(-8436063189.993355,-1618583989.913671) */
/* */
/* ou 'm2' designe 'point_manoeuvre_2'... */
aCsomme(element_courant_de_la_suite_Pn,element_courant_de_la_suite_Pn,point_manoeuvre_2);
/* Et enfin calcul iteratif de l'approximation de la fonction 'zeta(C)' : */
/* */
/* zeta(C) = zeta(C) + z */
/* 2 */
/* */
Eblock
)
,NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW
);
Eblock
end_image
RETIJ(imageR);
Eblock
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' zeta ' D E R I E M A N N */
/* D A N S L E P L A N C O M P L E X E A V E C L A S E R I E D ' E U L E R */
/* S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/* */
/* Definition : */
/* */
/* Voir la fonction 'IJfonction_serie_zeta_dans_C(...)', */
/* avec, il faut le noter, une petite difference au niveau */
/* des temps de calcul. En effet, lorsque l'on cherche a */
/* faire plusieurs calculs de suite en augmentant le nombre */
/* d'iterations : */
/* */
/* IJfonction_serie_zeta_dans_C(...) : peut exploiter les iterations anterieures, alors que */
/* IFfonction_serie_zeta_dans_C(...) : refait systematiquement tous les calculs, c'est-a-dire a */
/* partir de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN' */
/* et donne des images "non standard". */
/* Ifonction_serie_zeta_dans_C(...) : refait systematiquement tous les calculs, c'est-a-dire a */
/* partir de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN' */
/* et donne des images "standard". */
/* */
/* On verra a ce propos 'v $xrc/zeta.01$K' qui "tourne" en */
/* un temps proportionnel au carre du nombre d'iterations, */
/* alors que 'v $xrc/zeta.02$K' tourne en un temps lineaire... */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " N O N - S T A N D A R D " D E L A F O N C T I O N ' zeta ' D E R I E M A N N */
/* C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionF
DEFV(Common,DEFV(FonctionF,POINTERF(IFfonction_serie_zeta_dans_C(partie_reelle_de_la_fonction_zeta_de_Riemann
,partie_imaginaire_de_la_fonction_zeta_de_Riemann
,module_de_la_fonction_zeta_de_Riemann
,phase_de_la_fonction_zeta_de_Riemann
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_d_iterations
)
)
)
)
DEFV(Argument,DEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,module_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,phase_de_la_fonction_zeta_de_Riemann));
/* Quatre images Resultat a generer qui donne respectivement la partie Reelle, la partie */
/* Imaginaire, le Module et la Phase d'une approximation de la fonction Zeta de Riemann. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BDEFV(imageJ,fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme d'une */
/* image Complexe. */
DEFV(complexe,valeur_initiale);
/* Valeur initiale de l'image Resultat. */
/*..............................................................................................................................*/
Cegal(valeur_initiale,C_____nombre_complexe__0__0);
CALS(IJinitialisation(fonction_zeta_de_Riemann,ADRESSE(valeur_initiale)));
/* Initialisation du processus iteratif sur : */
/* */
/* zeta(C) = 0 */
/* */
CALS(IJfonction_serie_zeta_dans_C(fonction_zeta_de_Riemann
,fonction_zeta_de_Riemann
,coin_bas_gauche
,coin_haut_droite
,PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN
,nombre_d_iterations
)
);
/* Calcul de la valeur de la fonction 'zeta' de Riemann en "complexe" depuis la toute */
/* premiere iteration... */
CALS(Icomplexe_reelle(partie_reelle_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
CALS(Icomplexe_imaginaire(partie_imaginaire_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
/* Recuperation des parties Reelles et Imaginaires de la fonction 'zeta' de Riemann, */
CALS(Iconversion_XY_RT(module_de_la_fonction_zeta_de_Riemann,phase_de_la_fonction_zeta_de_Riemann
,partie_reelle_de_la_fonction_zeta_de_Riemann,partie_imaginaire_de_la_fonction_zeta_de_Riemann
)
);
/* Puis calcul du Module et de la Phase dans [0,2.PI]. */
EDEFV(imageJ,fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument. */
RETIF(module_de_la_fonction_zeta_de_Riemann);
Eblock
EFonctionF
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L " S T A N D A R D " D E L A F O N C T I O N ' zeta ' D E R I E M A N N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Ifonction_serie_zeta_dans_C(partie_reelleR
,partie_imaginaireR
,moduleR
,phaseR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_d_iterations
)
)
)
)
DEFV(Argument,DEFV(image,partie_reelleR));
DEFV(Argument,DEFV(image,partie_imaginaireR));
DEFV(Argument,DEFV(image,moduleR));
DEFV(Argument,DEFV(image,phaseR));
/* Quatre images Resultat a generer qui donne respectivement la partie Reelle, la partie */
/* Imaginaire, le Module et la Phase d'une approximation de la fonction Zeta de Riemann. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
/* Nombre d'iterations demande. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BDEFV(imageJ,fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme d'une */
/* image Complexe. */
BDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
BDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux */
/* images Flottantes donnant la partie Reelle et la partie Imaginaire. */
BDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
BDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux */
/* images Flottantes donnant le Module et la Phase. */
/*..............................................................................................................................*/
CALS(IFfonction_serie_zeta_dans_C(partie_reelle_de_la_fonction_zeta_de_Riemann
,partie_imaginaire_de_la_fonction_zeta_de_Riemann
,module_de_la_fonction_zeta_de_Riemann
,phase_de_la_fonction_zeta_de_Riemann
,coin_bas_gauche
,coin_haut_droite
,nombre_d_iterations
)
);
/* Calcul de la valeur de la fonction 'zeta' de Riemann en "complexe" depuis la toute */
/* premiere iteration. */
CALS(Ifloat_std_avec_renormalisation(partie_reelleR,partie_reelle_de_la_fonction_zeta_de_Riemann));
CALS(Ifloat_std_avec_renormalisation(partie_imaginaireR,partie_imaginaire_de_la_fonction_zeta_de_Riemann));
CALS(Ifloat_std_avec_renormalisation(moduleR,module_de_la_fonction_zeta_de_Riemann));
CALS(Ifloat_std_avec_renormalisation(phaseR,phase_de_la_fonction_zeta_de_Riemann));
/* Et enfin, conversion de la fonction 'zeta' de Riemann en quatre images "standards"... */
EDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
EDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux */
/* images Flottantes donnant le Module et la Phase. */
EDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
EDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux */
/* images Flottantes. */
EDEFV(imageJ,fonction_zeta_de_Riemann);
/* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument. */
RETI(moduleR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' zeta ' D E R I E M A N N */
/* D A N S L E P L A N C O M P L E X E A V E C L E P R O L O N G E M E N T A N A L Y T I Q U E : */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ...###%%%%OOOOOoooooooo#..... */
/* -......###%%%%%OOOOOO%%%######################################## */
/* :---......#####%%%%%%%%######################################### */
/* oo::---.......################################################## */
/* OOoo::---.........############################################## */
/* %%OOoo::---............. ##################################### */
/* #%%OOooo::---................. */
/* .##%%OOoo:::---................. */
/* ...#%%OOoo:::--.................. */
/* ....#%%OOoo::---................ */
/* --...#%%OOo:::--............. */
/* :-...##%OOoo:---........ ####################################### */
/* o:-...#%%Ooo:--.....############################################ */
/* o::-..##%Ooo:-....############################################## */
/* Oo:-...#%Oo::-.. #%%OOO%%####################################### */
/* :::: :::: :::::: */
/* -:oO%##..-:ooO%##...--.......... */
/* :ooO%#...-::oOO%##............... */
/* :oO%%#...-::oOO%%### ............ */
/* oOO%#...--::ooOO%%%###### ... */
/* OO%##...--::ooOO%%%############################################# */
/* O%##...--::ooOOO%%%%############################################ */
/* %##...--::oooOOO%%%%############################################ */
/* #....--::oooOOO%%%%############################################# */
/* ...---::ooOOOO%%%%############################################## */
/* ..--::oooOOO%%%%########### */
/* --::oooOO%%%%##### ............. */
/* ::ooOOO%%%####................... */
/* ooOO%%%###....................... */
/* O%%%###.........-----.......... */
/* %## .......-----:::::::.######################################## */
/* ......----:::::ooooooOO%######################################## */
/* */
/* */
/* Il s'agit de la phase calculee dans la */
/* fenetre [-10.0,+20.0]x[-15.0,+15.0] a */
/* l'aide du programme 'v $xrc/zeta.21$K'. */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_zeta_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_zeta_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_prolongement_analytique_zeta_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"zeta" /* Common,DEFV(Fonction,) : \ */
,IJfonction_prolongement_analytique_zeta_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_prolongement_analytique_zeta_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' cos ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_circulaire_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_cosinus_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"cos" /* Common,DEFV(Fonction,) : \ */
,IJfonction_cosinus_circulaire_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_cosinus_circulaire_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sin ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_circulaire_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_sinus_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sin" /* Common,DEFV(Fonction,) : \ */
,IJfonction_sinus_circulaire_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_sinus_circulaire_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' tg ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_circulaire_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_tangente_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"tg" /* Common,DEFV(Fonction,) : \ */
,IJfonction_tangente_circulaire_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_tangente_circulaire_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' ch ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_hyperbolique_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_cosinus_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"ch" /* Common,DEFV(Fonction,) : \ */
,IJfonction_cosinus_hyperbolique_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_cosinus_hyperbolique_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sh ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_hyperbolique_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_sinus_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sh" /* Common,DEFV(Fonction,) : \ */
,IJfonction_sinus_hyperbolique_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_sinus_hyperbolique_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' th ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_hyperbolique_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_tangente_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"th" /* Common,DEFV(Fonction,) : \ */
,IJfonction_tangente_hyperbolique_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_tangente_hyperbolique_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' exp ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_exponentielle_neperienne_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_exponentielle_neperienne_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_exponentielle_neperienne_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"exp" /* Common,DEFV(Fonction,) : \ */
,IJfonction_exponentielle_neperienne_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_exponentielle_neperienne_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20090303145735... */
EFonctionJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' log ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionJ
DEFV(Common,DEFV(Logical,SINT(IJfonction_logarithme_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_logarithme_dans_C_____simp,FAUX)));
/* Possibilite introduite le 20120121174948 et completee le 20120124091005... */
DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_logarithme_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFClogarithme /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"log" /* Common,DEFV(Fonction,) : \ */
,IJfonction_logarithme_dans_C_____edit /* Common,DEFV(Fonction,) : \ */
,IJfonction_logarithme_dans_C_____simp /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionJ
#undef GENERE__FonctionJ_I_FONCTION_C
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S I T E R A N T */
/* U N E F O N C T I O N D A N S L E P L A N C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionP_I_ITERAT_F_C POINTERp
/* Introduit le 20040520121238. */
#define GENERE__FonctionP_I_ITERAT_F_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module) \
/* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees */ \
/* a la recuperation automatique des fichiers d'arguments ; on trouvera donc : */ \
/* */ \
/* GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction) */ \
/* */ \
/* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre */ \
/* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f'). */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* mais : */ \
/* */ \
/* DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(image,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations)); \
/* Nombre maximal d'iterations demande. */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie)); \
/* Cet indicateur logique permet de choisir le type d'information que */ \
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */ \
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */ \
/* n */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_DANS_C \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */ \
/* 20061219090342). */ \
\
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES; \
/* Introduit le 20190314183222... */ \
\
begin_image \
Bblock \
gF_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(seuil_du_carre_du_module) \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_C; \
Eblock \
) \
/* Introduit le 20091012111043... */ \
,BLOC(Bblock \
Cegal(suite_point,point_courant); \
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */ \
/* soit : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
EGAL(nombre_courant_d_iterations,UN); \
/* Initialisation du compteur des iterations ; ce compteur est initialise */ \
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */ \
/* valeur non nulle soit rangee... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
,BLOC(Bblock \
CALS(Nfonction(suite_point)); \
Cegal(suite_point,Vfonction); \
/* Et iteration de la fonction : */ \
/* */ \
/* Z = Nfonction(Z ) */ \
/* n n */ \
/* */ \
/* en notant qu'il est preferable de ne pas ecrire : */ \
/* */ \
/* Cegal(suite_point,Nfonction(suite_point)); */ \
/* */ \
/* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON Cegal', */ \
/* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
/* Introduit le 20150225152454... */ \
); \
Eblock \
end_image \
\
RETI(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' gamma ' */
/* D A N S L E P L A N C O M P L E X E A V E C L E P R O L O N G E M E N T A N A L Y T I Q U E : */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* O:-..%Oo:-..#%Oo:o#-...-:ooO%%#... */
/* :..#Oo:-..%Oo:-... # :ooO%##...-::o */
/* .#%o:-.#%Oo:-..#% -#oO%#...--:ooO%%# */
/* %Oo-..%Oo:-.#%Oo: . ....-:ooO%%##...- */
/* Oo:..%Oo:..#%Oo:-... :oOO%# ...--:ooO */
/* :-.#Oo:..#Oo:-..#%O##.o%#...--::oOO%%##. */
/* :. %o:..%Oo:..#%Oo:-o###.--:ooO%%##....--: */
/* -.#O:-.#Oo-..%Oo:-..#O:.:oO%%##...--::oooOO% */
/* ..%O:.#%o-.#%O:-..%Ooo ::%....-::ooOO%%###.... */
/* .%o-.%O:. %o:..#Oo:-..: o% ooOO%##.....---:::oo */
/* .%o-.%o-.%O:..%o:-.#%Oo .::.#...--:::ooOOOO%%%### */
/* :.%o-.%o-.%o-.%o-.#%o:-... -Oo ooOO%%###.......----- */
/* :.#O-.%o.#O:.#O:.#O:-.#Oo :-o#O-...----:::oooooOOOOO%% */
/* O-.O:.%o-#O:.%o-.%:. %o-..:.%.#. OO%%%%#####............ */
/* O:.%o-#O-.O:.%o-#O:.%o o-%:-# .#. --:::::::::oooooooooooo */
/* o:#O: #:.#:.#::#o:#OO O #O## #%.%....................... */
/* .:%.:O -o#.o%.:O.-o#.: .% o ##-.. OOOoooooooooo:::::::::: */
/* -o#.o%.:O#-o%.:O#.:O#.:O:. #.:O. ---......... #######%%% */
/* :O.-o%.:O#-o%.-o%.-:O#..- #: o##%%%OOOoooo:::::------ */
/* :%.-O#.:O#.:O#.:o%..-oO%#.--:# ::--......###%%%%OOOO */
/* :%.:O#.:O%.-o%#.-oO%..-:o: .o.##%%OOoo:::---...... */
/* O#.:o%.-o%#.-oO#..:oO%#.#O: ::--....##%%%OOoooo: */
/* O%.-o%#.:o%#.-:O%#..-: ..o.#%%OOo::---.... ##% */
/* o%.-:O%.-:o%#.-:oO%#. -.%:--...##%%OOoo::--- */
/* o%#.-oO#.-:oO%..-:oOo##:%OOo::--...##%%OOO */
/* .:O%..:oO#..-oO%#..-#-. ...#%%Ooo::--.... */
/* .:oO#.-:oO#..-:oO%#-#- o:--...#%%OOoo:: */
/* .-:o%#.-:oO%#..-: :o-##%Ooo:--...##%% */
/* %..-:O%#..:oO%#.. -. -...#%OOo::--.. */
/* oO#..-oO%#..-:oO%% oo:-...#%%OOo: */
/* -:O%#.-:oO%#..-:o:o#.#%Ooo:-...##% */
/* ..:oO%#.-:oO%#..-O #-..#%%Ooo:--. */
/* */
/* */
/* Il s'agit de l'image 'v $xiirc/ITGA.11$Ph p=$xiP/dentscie.R4' */
/* calculee a l'aide du programme 'v $xrc/gamma.31$K'. */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_prolongement_analytique_gamma_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_prolongement_analytique_gamma_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin /* Common,DEFV(Fonction,) : \ */
,fFCgamma_sommation_Euler_MacLaurin_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_prolongement_analytique_gamma_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' zeta ' D E R I E M A N N */
/* D A N S L E P L A N C O M P L E X E A V E C L E P R O L O N G E M E N T A N A L Y T I Q U E : */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* --...##%OOoo:::--......#####%%-:::::#o%-........................ */
/* Oo::-....#%%OOooo::---......-o-o:::O.%O:######################## */
/* #%%Ooo:--...##%%OOOoo::::---::::::::::#.#%%%%%%%%%%%%%%%%%%%%%%% */
/* ...#%%Ooo:--....##%%OOOoooo:-:::::::::O.oOOOOOOOOOOOOOOOOOOOOOOO */
/* ::-...#%%Ooo:--....###%%%O-.:::::::::::.%ooooooooooooooooooooooo */
/* %Oo:--...#%OOoo:--.....##O-%.::::::::::.:----::::::::::::::::::: */
/* .#%Ooo:-...#%%Ooo::--...::#%O::::::::%:o........................ */
/* -..#%%Oo:--..##%OOo::--:%.o-o-:O::O:-o%:........................ */
/* o:-..#%%Oo:--..##%OOo-#o::::::::::#%OOo-######################## */
/* %Oo:-..#%%Oo:-...#::.::::::::::::::::#:o%%%%%%%%%%%%%%%%%%%%%%%% */
/* .#%Oo:-..#%Oo::o#O%#:::::::::::::::::.o#OOOOOOOOOOOOOOOOOOOOOOOO */
/* -..#%Oo:-..#:#:::::::::::::::::::::::-:%oooooooooooooooooooooooo */
/* o:-.#%Oo:-%:O:::::::::::::::::::::::::O#:::::::::::::::::::::::: */
/* %o:-..#o::::::::::::::::::::::::::::::..%----------------------- */
/* .%Oo::.O::::::::::::::::::::::::::::::.OO....................... */
/* :#%:::::::::::::::::::::::::::::::o............................. */
/* #.-#-::::::::::::::::::::::::::::::::.#-:%%%%%%%%%%%%%%%%%%%%%%% */
/* .-:O%#:::::::::::::::::::::::::::::::::.-OOOOOOOOOOOOOOOOOOOOOOO */
/* :oO% .-:oO-o-:::::::::::::::::::::::::.-oooooooooooooooooooooooo */
/* O%#..-:oO%#.:.::::::::::::::::::::::::O::::::::::::::::::::::::: */
/* #..-:oO%#..-::oO.-.-:::::::::::::::::.:.------------------------ */
/* .-:oO%#...-:oO%%#....:::::::::::::::..O:........................ */
/* :oO%##..-:oOO%#...--:##-::::::::::.:-:o%........................ */
/* O%#...-:oOO%#...--::ooO%.#-O:o:.:O:oOo.O######################## */
/* #..--:oOO%#...--:ooOO%%%::#..::::::::-:o%%%%%%%%%%%%%%%%%%%%%%%% */
/* .-:ooO%##...-::ooOO%%##...o.::::::::::O#OOOooooooooooooooooooooo */
/* :oO%%#...--:ooOO%%##.....-o%:::::::::::-O::::::::::::::::::::::: */
/* O%#...--:ooOO%##.....---:::.:::::::::::.%----------------------- */
/* ...-::ooO%%##....--:::oooOOO%-::::::::-#........................ */
/* -::oOO%##....--::oooOOO%%%%#o-O-.::O.-:O........................ */
/* oO%%#....--::ooOO%%%####....#.oO::::o:.%.####################### */
/* ##...--::ooOO%%##.......----O.::::::::::%%%%%%%%%%%%%%%%%%%%%%%% */
/* */
/* */
/* Il s'agit de l'image 'v $xiirc/ITZE.11$Ph p=$xiP/dentscie.R4' */
/* calculee a l'aide du programme 'v $xrc/zeta.31$K'. */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_prolongement_analytique_zeta_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_prolongement_analytique_zeta_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin /* Common,DEFV(Fonction,) : \ */
,fFCzeta_sommation_Euler_MacLaurin_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_prolongement_analytique_zeta_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' cos ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_cosinus_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_circulaire_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sin ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_sinus_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_circulaire_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' tg ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_C_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_tangente_circulaire_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_circulaire_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' ch ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_cosinus_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_hyperbolique_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sh ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_C_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_sinus_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_hyperbolique_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' th ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_C_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_tangente_hyperbolique_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_hyperbolique_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' exp ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_C_____seuil,FLOT(MILLIARD))));
/* Seuil de divergence du carre du module lors des iterations. */
/* */
/* Le 20090303182646, il est passe de 'FDEUX' a 'MILLIARD'... */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_exponentielle_neperienne_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_exponentielle_neperienne_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20090303145735... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' log ' C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_C_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_logarithme_dans_C(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFClogarithme /* Common,DEFV(Fonction,) : \ */
,fFClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_logarithme_dans_C_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
EFonctionP
#undef GENERE__FonctionP_I_ITERAT_F_C
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D ' U N P O L Y N O M E V A R I A B L E Q U E L C O N Q U E */
/* D A N S L E P L A N C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* z = C */
/* 0 */
/* */
/* z = polynome(z ) */
/* n+1 n */
/* */
/* (ou 'C' designe le point Courant). */
/* */
/* La fonction 'polynome(...)' est definie */
/* par (la translation 't' de l'exposant pouvant */
/* etre negative a compter du 20100316172716) : */
/* */
/* 0+t 1+t p+t */
/* polynome(z) = A .z + A .z + ... + A .z + alpha.A + beta.C */
/* 0 1 p */
/* */
/* (ou 'A' et 'C' designent respectivement un */
/* nombre complexe arbitraire Argument et le */
/* point Courant). Quant a la suite de coefficients */
/* {A0,A1,...,Ap} elle est definie a partir d'un album */
/* d'images (indexe par 'Z' -majuscule-, d'ou ici le choix */
/* de 'z' -minuscule- pour designer un nombre complexe). */
/* */
/* Mais ATTENTION, si cela permet de faire varier */
/* localement le polynome au point {X,Y} on notera */
/* bien que : */
/* */
/* C # X + i.Y */
/* */
/* a priori (les coordonnees {X,Y} sont relatives */
/* a une image, alors que 'C' est dans le plan */
/* complexe. Cela signifie que lors d'un changement */
/* de la fenetre de calcul {coin_bas_gauche,coin_haut_droite} */
/* (par zoom et/ou translation), les coefficients {A0,A1,...,Ap} */
/* du polynome, eux, resteront les memes... */
/* */
/* Enfin, on notera deux choix importants possibles : */
/* */
/* {alpha=1,beta=0} : ensemble de type "Julia", */
/* {alpha=0,beta=1} : ensemble de type "Mandelbrot", */
/* */
/* toutes les autres combinaisons etant evidemment */
/* possibles... */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_C_____premier_exposant_du_polynome,ZERO)));
/* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances */
/* negatives de 'Z'... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_C(imageR
,definition_du_polynome
,ponderation_du_nombre_complexe_argument_A
,ARGUMENT_POINTERs(nombre_complexe_argument_A)
,ponderation_du_nombre_complexe_courant_C
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,seuil_du_carre_du_module
,visualisation_arguments_de_sortie
)
)
)
)
/* Fonction introduite le 20040508115225... */
DEFV(Argument,DEFV(image,imageR));
/* Image Resultat a generer. */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
/* Definition du polynome variable (en {X,Y}) a l'aide d'un album. */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_complexe_argument_A));
/* Ponderation du nombre complexe argument 'A' (dit 'alpha' dans 'alpha.A + beta.C'). */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_complexe_argument_A)));
/* Nombre complexe argument 'A'. */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_complexe_courant_C));
/* Ponderation du nombre complexe courant 'C' (dit 'beta' dans 'alpha.A + beta.C'). */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
/* Seuil du carre du module definissant l'arret des iterations. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
/* Introduit le 20190314183222... */
begin_image
Bblock
gF_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(seuil_du_carre_du_module)
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_C;
Eblock
)
/* Introduit le 20091012111043... */
,BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes avec : */
/* */
/* z = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(VIDE;
)
,BLOC(Bblock
DEFV(complexe,puissance_courante);
DEFV(complexe,polynome_courant);
aCpuissance(puissance_courante
,point_courant
,Iiteration_polynome_variable_quelconque_dans_C_____premier_exposant_du_polynome
);
/* Avant le 20100316172716, il y avait ici : */
/* */
/* Cinitialisation(puissance_courante,R1_Complexe,I0_Complexe); */
/* */
/* ce qui revient au meme lorsque l'exposant est nul : */
/* */
/* 0 */
/* puissance(z) = z = {1,0} */
/* */
/* ce qui est le cas par defaut... */
aCcombinaison_lineaire_2(polynome_courant
,ponderation_du_nombre_complexe_argument_A
,INDIRECT(nombre_complexe_argument_A)
,ponderation_du_nombre_complexe_courant_C
,point_courant
);
/* Definition du polynome et initialisation avec : */
/* */
/* polynome(z ) = alpha.A + beta.C */
/* n */
/* */
begin_fuite
Bblock
DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
/* ATTENTION : ne pas confondre le 'Z' ci-dessus qui indexe les pages de l'album et les */
/* nombres complexes 'Z' (notes d'ailleurs 'z' a cause de cela...). */
DEFV(complexe,monome_courant);
aCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
aCsomme(polynome_courant,polynome_courant,monome_courant);
aCproduit(puissance_courante,puissance_courante,suite_point);
/* Calcul du polynome courant : */
/* */
/* 0 1 p */
/* polynome(z) = A .z + A .z + ... + A .z + alpha.A + beta.C */
/* 0 1 p */
/* */
/* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'... */
Eblock
end_fuite
Cegal(suite_point,polynome_courant);
/* Et iteration de la fonction : */
/* */
/* z = polynome(z ) */
/* n+1 n */
/* */
Eblock
)
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
#undef F_ITERATION_DANS_C
#undef gF_ITERATION_DANS_C
#undef gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES
#undef BVARIABLES_F_ITERATION_DANS_C
#undef gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES
#undef IGNORER__Xmax__Ymax
#undef IGNORER__Xmin__Ymin
#undef Xmax_Ymax__UNDEF
#undef Xmin_Ymin__UNDEF
#undef TEST_DU_CARRE_DU_MODULE_DANS_C
#undef F_ITERATION_QUELCONQUE_DANS_C
#undef BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C
#undef BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S N E C E S S A I R E S A U C A L C U L E N " E N T I E R " C O M P L E X E */
/* S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_I_ITERATION_DANS_C \
/* Definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE; \
/* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il */ \
/* necessaire (introduit le 20091124124351) ? */ \
\
DEFV(Float,INIT(x_homothetie \
,DIVI(SOUS(X_COIN_HAUT_DROITE \
,X_COIN_BAS_GAUCHE \
) \
,FLOT(dimX) \
) \
) \
); \
/* "Taille" reelle de la fenetre rapportee a la taille des images, */ \
DEFV(Float,INIT(y_homothetie \
,DIVI(SOUS(Y_COIN_HAUT_DROITE \
,Y_COIN_BAS_GAUCHE \
) \
,FLOT(dimY) \
) \
) \
); \
/* "Taille" imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(complexe,point_courant); \
/* Point complexe courant 'C' dans la fenetre. */ \
DEFV(complexe,suite_point); \
/* Suite des points complexes Z lors de l'iteration. */ \
/* n */ \
DEFV(complexe,point_manoeuvre); \
/* Point complexe de maneuvre lors de l'iteration. */ \
DEFV(pointI_2D,transforme); \
/* Point transforme dans [Xmin,Xmax][Ymin,Ymax]. */ \
DEFV(pointI_2D,intermediaire); \
/* Point intermediaire transforme dans [Xmin,Xmax][Ymin,Ymax]. */ \
BDEFV(imageI,partie_reelle); \
/* Partie reelle dans [Xmin,Xmax] de la transformee Z = f(Z ). */ \
/* 1 0 */ \
BDEFV(imageI,partie_imaginaire); \
/* Partie imaginaire dans [Ymin,Ymax] de la transformee Z = f(Z ). */ \
/* 1 0 */ \
BDEFV(imageF,module_au_carre); \
/* Module au carre dans R de la transformee Z = f(Z ). */ \
/* 1 0 */ \
VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;
#define EVARIABLES_I_ITERATION_DANS_C \
/* Fin de definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
EDEFV(imageF,module_au_carre); \
/* Module au carre dans R de la transformee Z = f(Z ). */ \
/* 1 0 */ \
EDEFV(imageI,partie_imaginaire); \
/* Partie imaginaire dans [Ymin,Ymax] de la transformee Z = f(Z ). */ \
/* 1 0 */ \
EDEFV(imageI,partie_reelle); \
/* Partie reelle dans [Xmin,Xmax] de la transformee Z = f(Z ). */ \
/* 1 0 */
#define INITIALISATION_I_ITERATION_DANS_C(init_iteration,fonc_iteration) \
/* Sequence d'initialisation du calcul iteratif au point {X,Y}. */ \
Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_C; \
/* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image. */ \
BLOC(init_iteration); \
/* Initialisation de la suite des nombres complexes sur le "point_courant", */ \
/* soit : */ \
/* */ \
/* Z = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
aCproduit(point_manoeuvre,suite_point,suite_point); \
/* Calculons : */ \
/* */ \
/* 2 */ \
/* Z */ \
/* n */ \
/* */ \
\
BLOC(fonc_iteration); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* Z + C */ \
/* n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* Z + A */ \
/* n */ \
/* */ \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
\
storeI_point(X_PLAN_IMAGE_MODULO \
,partie_reelle \
,X,Y \
); \
/* Memorisation de la partie reelle de la transformee dans [Xmin,Xmax]. */ \
storeI_point(Y_PLAN_IMAGE_MODULO \
,partie_imaginaire \
,X,Y \
); \
/* Memorisation de la partie imaginaire de la transformee dans [Ymin,Ymax]. */ \
storeF_point(Cmodule2(suite_point) \
,module_au_carre \
,X,Y \
); \
/* Memorisation du carre du module de la transformee. */ \
Eblock
#define I_ITERATION_DANS_C(init_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
Bblock \
INITIALISATION_POINT_2D(transforme,X,Y); \
/* Initialisation de Z "entiere" sur le point courant {X,Y}. */ \
/* n */ \
BLOC(init_iteration); \
/* Initialisation du compteur des iterations. */ \
\
Tant(IFET(IFLT(loadF_point(module_au_carre,ASD1(transforme,x),ASD1(transforme,y)) \
,iterations_diverses_dans_C_____seuil_du_carre_du_module \
) \
,PAS_ASSEZ_D_ITERATIONS \
) \
) \
Bblock \
INCR(nombre_courant_d_iterations,I); \
INITIALISATION_POINT_2D(intermediaire \
,loadI_point(partie_reelle,ASD1(transforme,x),ASD1(transforme,y)) \
,loadI_point(partie_imaginaire,ASD1(transforme,x),ASD1(transforme,y)) \
); \
TRANSFERT_POINT_2D(transforme,intermediaire); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* Z = Z + C */ \
/* n+1 n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* Z = Z + A */ \
/* n+1 n */ \
/* */ \
Eblock \
ETan \
\
Test(IL_FAUT(visualisation_arguments_de_sortie)) \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments)) \
Bblock \
EGAL(niveau_courant_precis \
,ATAN(Y_IMAGE_PLAN(ASD1(transforme,y)) \
,X_IMAGE_PLAN(ASD1(transforme,x)) \
) \
); \
EGAL(niveau_courant \
,GENP(SCAL(niveau_courant_precis \
,CERCLE_TRIGONOMETRIQUE \
,BLANC \
) \
) \
); \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,Rho_2D(X_IMAGE_PLAN(ASD1(transforme,x)) \
,Y_IMAGE_PLAN(ASD1(transforme,y)) \
) \
); \
EGAL(niveau_courant \
,GENP(SCAL(TRON(niveau_courant_precis \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,BLANC \
) \
) \
); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,CASP_Float(nombre_courant_d_iterations) \
); \
/* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211. */ \
EGAL(niveau_courant \
,GENP(SCAL(nombre_courant_d_iterations \
,nombre_maximal_d_iterations \
,BLANC \
) \
) \
); \
Eblock \
ETes \
\
RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
/* Et enfin, marquage du point courant. */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D ' U N F A U X E N S E M B L E D E M A N D E L B R O T C O M P L E X E */
/* D A N S U N E F E N E T R E S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/* */
/* Nota : */
/* */
/* Lors du calcul de l'ensemble */
/* de Mandelbrot, a chaque iteration, */
/* on reprend en compte le nombre */
/* complexe courant 'C' d'ou on est */
/* parti ; or ici, on utilise une */
/* espece de matrice de permutation */
/* calculee une fois pour toute, */
/* dont l'apport de 'C' n'a lieu qu'a */
/* la premiere iteration : c'est donc */
/* un "faux" Mandelbrot... */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Ifaux_mandelbrot_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_I_ITERATION_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
begin_image
Bblock
INITIALISATION_I_ITERATION_DANS_C(BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le point courant, soit : */
/* */
/* Z = C */
/* 0 */
/* */
/* On notera la difference avec 'IFmandelbrot' qui est rendue necessaire par le fait que */
/* lors de l'initialisation une seule iteration est effectuee, et que partant de '0', on */
/* trouverait ainsi : */
/* */
/* Z = C */
/* 1 */
/* */
/* Ainsi, lors de l'iteration (vu son principe), on resterait sur place puisque : */
/* */
/* transforme(X ou Y) = (X ou Y) */
/* */
/* via les matrices 'partie_reelle' et 'partie_imaginaire'... */
Eblock
)
,BLOC(Bblock
aCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* Z = Z + C */
/* n+1 n */
/* */
/* ou 'C' designe le point Courant. */
Eblock
)
);
Eblock
end_image
begin_image
Bblock
I_ITERATION_DANS_C(BLOC(Bblock
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations. */
Eblock
)
);
Eblock
end_image
EVARIABLES_I_ITERATION_DANS_C
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D ' U N F A U X E N S E M B L E D E J U L I A C O M P L E X E */
/* D A N S U N E F E N E T R E S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Ifaux_julia_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */
/* de Z lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */
/* n */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_I_ITERATION_DANS_C
DEFV(complexe,point_argument);
/* Point complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
Cegal(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre complexe "generateur"... */
begin_image
Bblock
INITIALISATION_I_ITERATION_DANS_C(BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point_courant", soit : */
/* */
/* Z = C */
/* 0 */
/* */
Eblock
)
,BLOC(Bblock
aCsomme(suite_point,point_manoeuvre,point_argument);
/* Puis : */
/* */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* ou 'A' designe le point Argument. */
Eblock
)
);
Eblock
end_image
begin_image
Bblock
I_ITERATION_DANS_C(BLOC(Bblock
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
);
Eblock
end_image
EVARIABLES_I_ITERATION_DANS_C
RETI(imageR);
Eblock
EFonctionP
#undef I_ITERATION_DANS_C
#undef INITIALISATION_I_ITERATION_DANS_C
#undef EVARIABLES_I_ITERATION_DANS_C
#undef BVARIABLES_I_ITERATION_DANS_C
#undef SEUIL_MODULE_DANS_C
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S E U I L D U M O D U L E " C H E V E L U " C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Float,ZINT(F_ITERATION_CHEVELUE_DANS_C_____seuil_du_carre_du_module,EXP2(GRO16(UNITE)))));
/* Seuil de divergence du carre du module d'un nombre complexe de la suite. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S N E C E S S A I R E S A U C A L C U L " C H E V E L U " C O M P L E X E */
/* E N " F L O T T A N T " S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_ITERATION_CHEVELUE_DANS_C \
/* Definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE; \
/* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il */ \
/* necessaire (introduit le 20091124124351) ? */ \
\
DEFV(Float \
,INIT(x_homothetie \
,DIVI(SOUS(X_COIN_HAUT_DROITE \
,X_COIN_BAS_GAUCHE \
) \
,FLOT(dimX) \
) \
) \
); \
/* "Taille" reelle de la fenetre rapportee a la taille des images, */ \
DEFV(Float \
,INIT(y_homothetie \
,DIVI(SOUS(Y_COIN_HAUT_DROITE \
,Y_COIN_BAS_GAUCHE \
) \
,FLOT(dimY) \
) \
) \
); \
/* "Taille" imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(Positive,INIT(nombre_courant_d_iterations,UNDEF)); \
/* Nombre courant d'iterations. */ \
DEFV(Logical,INIT(iterer,LUNDEF)); \
/* Indicateur precisant s'il faut iterer ('VRAI') ou s'arreter ('FAUX'). */ \
DEFV(complexe,point_courant); \
/* Point complexe courant 'C' dans la fenetre. */ \
DEFV(complexe,suite_point); \
/* Suite des points complexes Z lors de l'iteration. */ \
/* n */ \
DEFV(complexe,derivee_suite_point); \
/* Suite des derivees complexes dZ lors de l'iteration, ou 'dZ' designe la derivee de */ \
/* n */ \
/* l'iteration par rapport au point courant 'C' ; elle est definie par la recurrence : */ \
/* */ \
/* dZ = (2.Z .dZ ) + 1 */ \
/* n+1 n n */ \
/* */ \
/* ou : */ \
/* */ \
/* dZ = (2.Z .dZ ) + 0 */ \
/* n+1 n n */ \
/* */ \
/* avec : */ \
/* */ \
/* dZ = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* dZ = 1 */ \
/* 0 */ \
/* */ \
/* suivant que l'on calcule Mandelbrot ou Julia. */ \
DEFV(complexe,increment_de_la_derivee_suite_point); \
/* Increment utilise pour le calcul de la derivee complexe ; il vaut suivant l'ensemble */ \
/* que l'on calcule : (1,0) ou (0,0). */ \
DEFV(Float,INIT(distance,FLOT__UNDEF)); \
/* Valeur estimee de la distance courante du point 'z' a l'ensemble que l'on calcule ; il */ \
/* s'agit d'une approximation valant : */ \
/* */ \
/* |Z | */ \
/* 1 | n| */ \
/* d(z) = ---.-------.Log(|Z |) */ \
/* 2 |dZ | n */ \
/* | n| */ \
/* */ \
/* valable pour les petits modules et les grandes valeurs de 'n'. */ \
BDEFV(imageF,image_des_distances); \
/* Image flottante contenant les distances avant la normalisation. */ \
DEFV(complexe,point_manoeuvre); \
/* Point complexe de maneuvre lors de l'iteration. */
#define EVARIABLES_F_ITERATION_DANS_C \
/* Fin de definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
EDEFV(imageF,image_des_distances); \
/* Image flottante contenant les distances avant la normalisation. */
#define DISTANCES_ANORMALES_AVANT \
F_INFINI \
/* Valeur a donner aux distances pour lesquelles on risque '1/0' et 'Log(0)' ; cette valeur */ \
/* est fortement positive afin que les tests d'eloignement par rapport au seuil soient */ \
/* possibles... */
#define DISTANCES_ANORMALES_APRES \
F_MOINS_L_INFINI \
/* Valeur a donner aux distances pour lesquelles on risque '1/0' et 'Log(0)' ; cette valeur */ \
/* est fortement negative afin que les tests de recherche de la vraie distance maximale */ \
/* pour la renormalisation soient possibles... */
#define F_ITERATION_CHEVELUE_DANS_C(init_iteration,derivee_fonc_iteration,fonc_iteration,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_C; \
/* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image. */ \
BLOC(init_iteration); \
/* Initialisation de la suite des nombres complexes sur le "point_courant", */ \
/* soit : */ \
/* */ \
/* Z = 0 */ \
/* 0 */ \
/* */ \
/* dZ = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
/* dZ = 1 */ \
/* 0 */ \
/* */ \
/* et, initialisation du compteur des iterations. */ \
\
EGAL(iterer,VRAI); \
/* Ainsi, on fera au moins la premiere iteration... */ \
Tant(IL_FAUT(iterer)) \
Bblock \
aCproduit(point_manoeuvre,suite_point,derivee_suite_point); \
/* Calculons : */ \
/* */ \
/* Z .dZ */ \
/* n n */ \
/* */ \
aCforme_lineaire(derivee_suite_point,FDEUX,point_manoeuvre,FZERO); \
/* Puis : */ \
/* */ \
/* 2.Z .dZ */ \
/* n n */ \
/* */ \
aCsomme(derivee_suite_point,derivee_suite_point,increment_de_la_derivee_suite_point); \
/* Puis : */ \
/* */ \
/* dZ = (2.Z .dZ ) + 1 */ \
/* n+1 n n */ \
/* */ \
/* ou : */ \
/* */ \
/* dZ = (2.Z .dZ ) + 0 */ \
/* n+1 n n */ \
/* */ \
aCproduit(point_manoeuvre,suite_point,suite_point); \
/* Calculons : */ \
/* */ \
/* 2 */ \
/* Z */ \
/* n */ \
/* */ \
BLOC(fonc_iteration); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* Z + C */ \
/* n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* Z + A */ \
/* n */ \
/* */ \
Test(IFOU(IZEQ(Cmodule(suite_point)),IZEQ(Cmodule(derivee_suite_point)))) \
Bblock \
EGAL(distance,DISTANCES_ANORMALES_AVANT); \
/* Si l'un des modules est nul, on va soit rencontrer 1/0, soit Log(0), ce qui est tres */ \
/* mauvais ; afin de forcer l'iteration, on choisit arbitrairement une distance infinie... */ \
Eblock \
ATes \
Bblock \
EGAL(distance \
,MUL2(MOIT(DIVI(Cmodule(suite_point) \
,Cmodule(derivee_suite_point) \
) \
) \
,LOGX(Cmodule(suite_point)) \
) \
); \
/* Sinon, on calcule l'approximation de la distance. */ \
Eblock \
ETes \
Test(IFGE(Cmodule2(suite_point),F_ITERATION_CHEVELUE_DANS_C_____seuil_du_carre_du_module)) \
Bblock \
EGAL(iterer,FAUX); \
/* Lorsqu'on s'eloigne trop, on s'arrete... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Test(IFGE(nombre_courant_d_iterations,PRED(nombre_maximal_d_iterations))) \
Bblock \
EGAL(iterer,FAUX); \
/* On ne peut malheureusement faire une infinite d'iterations ; on notera le 'PRED' qui */ \
/* permet, lors du codage du point {X,Y}, de faire la difference entre le cas ou l'on a fait */ \
/* trop d'iterations (cas present), et le cas suivant (ou la distance d'approche est */ \
/* atteinte... */ \
Eblock \
ATes \
Bblock \
INCR(nombre_courant_d_iterations,I); \
/* Et comptage des iterations effectuees... */ \
Eblock \
ETes \
Test(IFLE(distance,seuil_de_la_distance)) \
Bblock \
EGAL(iterer,FAUX); \
/* Lorsqu'on s'approche tres pres de l'ensemble, on considere qu'on appartient */ \
/* surement a ce meme ensemble... */ \
EGAL(nombre_courant_d_iterations,nombre_maximal_d_iterations); \
/* Et ce afin de coder correctement le point {X,Y} courant ; on notera, le 'PRED' du test */ \
/* precedent, qui permet lors du codage du point {X,Y}, de faire la difference entre le cas */ \
/* ou l'on a fait trop d'iterations (cas present), et le cas courant (ou la distance */ \
/* d'approche est atteinte)... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
Eblock \
ETan \
\
Choi(mode_de_visualisation) \
Bblock \
Ca1e(VISUALISATION_DU_NOMBRE_D_ITERATIONS) \
Bblock \
store_point(GENP(SCAL(nombre_courant_d_iterations \
,nombre_maximal_d_iterations \
,BLANC \
) \
) \
,imageR \
,X,Y \
,FVARIABLE \
); \
/* Et enfin, marquage du point courant {X,Y} soit avec l'argument de sortie, soit avec */ \
/* le nombre courant d'iterations. */ \
Eblock \
ECa1 \
\
Ca1e(VISUALISATION_DE_L_ARGUMENT_DE_SORTIE) \
Bblock \
store_point(GENP(SCAL(Cargument_2PI(suite_point) \
,CERCLE_TRIGONOMETRIQUE \
,BLANC \
) \
) \
,imageR \
,X,Y \
,FVARIABLE \
); \
/* Et enfin, marquage du point courant {X,Y} soit avec l'argument de sortie, soit avec */ \
/* le nombre courant d'iterations. */ \
Eblock \
ECa1 \
\
Ca1e(VISUALISATION_DES_ORBITES) \
Bblock \
store_point_valide(load_point(imageA,X,Y) \
,imageR \
,X_PLAN_IMAGE,Y_PLAN_IMAGE \
,FVARIABLE \
); \
/* Et enfin, marquage du point courant de Z avec le point courant {X,Y} afin de tenter de */ \
/* n */ \
/* visualiser la trajectoire ('orbite') des points en montrant le deplacement des points de */ \
/* 'imageA'. */ \
Eblock \
ECa1 \
\
Ca1e(VISUALISATION_DES_DISTANCES) \
Bblock \
storeF_point(COND(IFNE(distance,DISTANCES_ANORMALES_AVANT),distance,DISTANCES_ANORMALES_APRES) \
,image_des_distances \
,X,Y \
); \
/* Et on memorise la distance courante d(z), mais en remplacant 'DISTANCES_ANORMALES_AVANT' */ \
/* par son oppose ('DISTANCES_ANORMALES_APRES') afin d'etre capable a la fin de calculer */ \
/* le vrai maximum des distances (qui alors sera mis a la place de */ \
/* 'DISTANCES_ANORMALES_APRES'). */ \
Eblock \
ECa1 \
\
Defo \
Bblock \
PRINT_ERREUR("le mode de visualisation demande n'existe pas"); \
Eblock \
EDef \
Eblock \
ECho \
\
BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
Eblock
#define F_INITIALISATION_DES_DISTANCES \
/* Sequence d'initialisation du calcul de l'image des distances si necessaire... */ \
Bblock \
Test(IFEQ(mode_de_visualisation,VISUALISATION_DES_DISTANCES)) \
Bblock \
CALS(IFinitialisation(image_des_distances,FZERO)); \
/* Et on nettoie la matrice Resultat (flottante)... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#define F_RENVOI_DES_DISTANCES \
/* Sequence de fin du calcul de l'image des distances si necessaire... */ \
Bblock \
Test(IFEQ(mode_de_visualisation,VISUALISATION_DES_DISTANCES)) \
Bblock \
DEFV(Float,INIT(distance_minimale,FLOT__UNDEF)); \
/* Afin de rechercher la vraie valeur minimale des distances d(z)... */ \
DEFV(Float,INIT(distance_maximale,IFnivo_maximum(image_des_distances))); \
/* Recherche de la vraie valeur maximale des distances d(z)... */ \
traite_image_BH_GD(BLOC(Bblock \
Test(IFEQ(loadF_point(image_des_distances,X,Y),DISTANCES_ANORMALES_APRES)) \
Bblock \
storeF_point(DISTANCES_ANORMALES_AVANT \
,image_des_distances \
,X,Y \
); \
/* Les points pour lesquels on a evite '1/0' et 'Log(0)' avaient ete codes par */ \
/* 'DISTANCES_ANORMALES_APRES' ; maintenant que l'on connait la plus grande distance d(z) */ \
/* recontree ('distance_maximale'), on leur donne la valeur 'DISTANCES_ANORMALES_AVANT' */ \
/* afin de pouvoir rechercher le vrai minimum ('distance_minimale')... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
) \
); \
EGAL(distance_minimale,IFnivo_minimum(image_des_distances)); \
/* Recherche de la vraie valeur minimale des distances d(z)... */ \
traite_image_BH_GD(BLOC(Bblock \
Test(IFEQ(loadF_point(image_des_distances,X,Y),DISTANCES_ANORMALES_AVANT)) \
Bblock \
storeF_point(distance_minimale \
,image_des_distances \
,X,Y \
); \
/* Les points pour lesquels on a evite '1/0' et 'Log(0)' avaient ete codes par */ \
/* 'DISTANCES_ANORMALES_AVANT' ; maintenant que l'on connait la plus petite distance d(z) */ \
/* recontree ('distance_minimale'), on leur donne cette valeur ; ainsi, l'appel a */ \
/* 'Ifloat_std_avec_renormalisation' ne sera pas perturbe par 'DISTANCES_ANORMALES_AVANT'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
) \
); \
CALS(Ifloat_std_avec_renormalisation(imageR,image_des_distances)); \
/* Conversion de l'image Resultat en une image standard... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T C H E V E L U C O M P L E X E */
/* D A N S U N E F E N E T R E S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* 2 */
/* Z = Z + C */
/* n+1 n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Soit sa derivee par rapport au point 'C' : */
/* */
/* Z' = 0 */
/* 0 */
/* */
/* Z' = 2.Z .Z' + 1 */
/* n+1 n n */
/* */
/* On definit ensuite la distance : */
/* */
/* |Z | */
/* 1 n */
/* d(z) = ---.------.Log(|Z |) */
/* 2 |Z'| n */
/* n */
/* */
/* elle est valable pour les petits modules, */
/* et les grandes valeurs de 'n'... */
/* */
/* Si d(z) devient inferieur a un certain */
/* seuil, a lors 'C' appartient a l'ensemble */
/* de Mandelbrot. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ** */
/* ***** */
/* ***** */
/* * * ********* * */
/* ******************* ** */
/* ********************** */
/* ************************** */
/* **************************** */
/* * ***** **************************** */
/* *********** ***************************** */
/* ************ **************************** */
/* ********************************************************* */
/* ************ **************************** */
/* *********** ***************************** */
/* * ***** **************************** */
/* **************************** */
/* ************************** */
/* ********************** */
/* ******************* ** */
/* * * ********* * */
/* ***** */
/* ***** */
/* ** */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_chevelu_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,nombre_maximal_d_iterations
,seuil_de_la_distance
,mode_de_visualisation
,ARGUMENT_FACULTATIF(imageA)
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Float,seuil_de_la_distance));
/* Ce seuil permet de savoir a partir de quel moment on pense etre pres de l'ensemble. */
DEFV(Argument,DEFV(Int,mode_de_visualisation));
/* Il definit le mode visualisation demandee, et vaut : */
/* VISUALISATION_DU_NOMBRE_D_ITERATIONS, ou */
/* VISUALISATION_DE_L_ARGUMENT_DE_SORTIE, ou */
/* VISUALISATION_DES_ORBITES, ou enfin */
/* VISUALISATION_DES_DISTANCES. */
DEFV(Argument,DEFV(image,imageA));
/* Image Argument (facultatif) d'aide a la visualisation des orbites des points */
/* au cours des iterations ; son existence est conditionnee par 'mode_de_visualisation'. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_CHEVELUE_DANS_C
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
F_INITIALISATION_DES_DISTANCES;
traite_image_BH_GD(BLOC(F_ITERATION_CHEVELUE_DANS_C(BLOC(Bblock
Cegal(suite_point,C_____nombre_complexe__0__0);
/* Initialisation de la suite des nombres complexes sur l'origine, */
/* soit : */
/* */
/* Z = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la */
/* difference entre Julia et Mandelbrot ne serait plus evidente... */
Cegal(derivee_suite_point,C_____nombre_complexe__0__0);
/* Initialisation de la derivee de la suite des nombres complexes, */
/* soit : */
/* */
/* dZ = 0 */
/* 0 */
/* */
Cegal(increment_de_la_derivee_suite_point,C_____nombre_complexe_p1__0);
/* Initialisation de l'increment utilise dans le calcul de la derivee, */
/* soit : */
/* */
/* increment = (1,0) */
/* */
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(VIDE;
)
,BLOC(Bblock
aCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* Z + C */
/* n */
/* */
/* ou 'C' designe le point complexe Courant. */
Eblock
)
,BLOC(VIDE;
)
/* Introduit le 20150225154041... */
);
)
);
F_RENVOI_DES_DISTANCES;
EVARIABLES_F_ITERATION_DANS_C
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E J U L I A C H E V E L U C O M P L E X E */
/* D A N S U N E F E N E T R E S U I V A N T U N P R O C E S S U S N O N O P T I M I S E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Z = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* 2 */
/* Z = Z + A */
/* n+1 n */
/* */
/* Soit sa derivee par rapport au point 'C' : */
/* */
/* Z' = 1 */
/* 0 */
/* */
/* Z' = 2.Z .Z' + 0 */
/* n+1 n n */
/* */
/* On definit ensuite la distance : */
/* */
/* |Z | */
/* 1 n */
/* d(z) = ---.------.Log(|Z |) */
/* 2 |Z'| n */
/* n */
/* */
/* elle est valable pour les petits modules, */
/* et les grandes valeurs de 'n'... */
/* */
/* Si d(z) devient inferieur a un certain */
/* seuil, a lors 'C' appartient a l'ensemble */
/* de Julia calcule pour le nombre complexe 'A'. */
/* (ou 'A' designe un nombre complexe */
/* Argument arbitraire). */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* *...... .....*.... */
/* *......*.................****... */
/* ********...............***..... */
/* ........**.............***..... */
/* .........**...........**........ */
/* ..........***************........ */
/* ........**...***..******...... */
/* ....*............***......... */
/* ...............**........... */
/* ..............***....*..*.. */
/* ..........********...... */
/* ...........***...... */
/* ..........**...... */
/* ........*****.. */
/* ........*..... */
/* .....*#*..... */
/* .....*........ */
/* ..*****........ */
/* ......**.......... */
/* ......***........... */
/* ......********.......... */
/* ..*..*....***.............. */
/* ...........**............... */
/* .........***............*.... */
/* ......******..***...**........ */
/* ........***************......... */
/* ........**...........**........ */
/* .....***.............**....... */
/* .....***...............******* */
/* ...****.................*...... */
/* ....*..... ...... */
/* #***.... */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_chevelu_dans_C(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,ARGUMENT_POINTERs(nombre_argument)
,nombre_maximal_d_iterations
,seuil_de_la_distance
,mode_de_visualisation
,ARGUMENT_FACULTATIF(imageA)
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
/* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Float,seuil_de_la_distance));
/* Ce seuil permet de savoir a partir de quel moment on pense etre pres de l'ensemble. */
DEFV(Argument,DEFV(Int,mode_de_visualisation));
/* Il definit le mode visualisation demandee, et vaut : */
/* VISUALISATION_DU_NOMBRE_D_ITERATIONS, ou */
/* VISUALISATION_DE_L_ARGUMENT_DE_SORTIE, ou */
/* VISUALISATION_DES_ORBITES, ou enfin */
/* VISUALISATION_DES_DISTANCES. */
DEFV(Argument,DEFV(image,imageA));
/* Image Argument (facultatif) d'aide a la visualisation des orbites des points */
/* au cours des iterations ; son existence est conditionnee par 'mode_de_visualisation'. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_CHEVELUE_DANS_C
DEFV(complexe,point_argument);
/* Point complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
Cegal(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre complexe "generateur"... */
F_INITIALISATION_DES_DISTANCES;
traite_image_BH_GD(BLOC(F_ITERATION_CHEVELUE_DANS_C(BLOC(Bblock
Cegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Z = C */
/* 0 */
/* */
Cegal(derivee_suite_point,C_____nombre_complexe_p1__0);
/* Initialisation de la derivee de la suite des nombres complexes, */
/* soit : */
/* */
/* dZ = 1 */
/* 0 */
/* */
Cegal(increment_de_la_derivee_suite_point,C_____nombre_complexe__0__0);
/* Initialisation de l'increment utilise dans le calcul de la derivee, */
/* soit : */
/* */
/* increment = (0,0) */
/* */
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(VIDE;
)
,BLOC(Bblock
aCsomme(suite_point,point_manoeuvre,point_argument);
/* Puis : */
/* */
/* 2 */
/* Z + A */
/* n */
/* */
/* ou 'A' designe le point complexe Argument. */
Eblock
)
,BLOC(VIDE;
)
/* Introduit le 20150225154041... */
);
)
);
F_RENVOI_DES_DISTANCES;
EVARIABLES_F_ITERATION_DANS_C
RETI(imageR);
Eblock
EFonctionP
#undef F_RENVOI_DES_DISTANCES
#undef F_INITIALISATION_DES_DISTANCES
#undef F_ITERATION_CHEVELUE_DANS_C
#undef DISTANCES_ANORMALES_APRES
#undef DISTANCES_ANORMALES_AVANT
#undef EVARIABLES_F_ITERATION_DANS_C
#undef TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE
#undef TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE
#undef INITIALISATION_DU_POINT_COURANT_DANS_C
#undef BVARIABLES_F_ITERATION_CHEVELUE_DANS_C
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N T R O L E D E L ' A R I T H M E T I Q U E E T E N D U E */
/* L O R S D E C A L C U L S S U R L E S N O M B R E S H Y P E R - C O M P L E X E S : */
/* */
/*************************************************************************************************************************************/
#ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES));
/* Indicateur introduit le 20070129121923... */
#Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_COMPLEXES));
/* Indicateur introduit le 20070129133050... */
#Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S E U I L D U M O D U L E : */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil) \
IFLT(HCmodule2(suite_point),seuil) \
/* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_HC(...)'. */
#define SEUIL_MODULE_DANS_HC \
EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____seuil_du_carre_du_module
,SEUIL_MODULE_DANS_HC
)
)
);
/* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A L I T E S U R L E S I N V E R S I O N S : */
/* */
/*************************************************************************************************************************************/
#define PARAMETRE_D_INVERSION_Ri2 \
EXP2(FDU)
#define PARAMETRE_D_INVERSION_Rs2 \
EXP2(FU)
/* Parametres introduits le 20121104074503... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E P L I E M E N T E V E N T U E L D E L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Jorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Jextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Korigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Kextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
/* Possibilite introduite le 20121103095740... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S N E C E S S A I R E S A U C A L C U L E N " F L O T T A N T " */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_diverses_dans_HC_____centrer_la_rotation_3D_dans_la_fenetre,FAUX)));
/* Introduit le 20121227110206 afin de faciliter le changement de centre de rotation... */
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____X_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____Y_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____Z_centre_de_rotation_3D,FZERO)));
/* Introduit le 20091222133804 pour generaliser le processus de rotation. La valeur par */
/* defaut garantit la compatibilite anterieure... */
#define ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_apres_rotation,point_avant_rotation) \
Bblock \
DEFV(Float,INIT(X_centre_de_rotation_3D,iterations_diverses_dans_HC_____X_centre_de_rotation_3D)); \
DEFV(Float,INIT(Y_centre_de_rotation_3D,iterations_diverses_dans_HC_____Y_centre_de_rotation_3D)); \
DEFV(Float,INIT(Z_centre_de_rotation_3D,iterations_diverses_dans_HC_____Z_centre_de_rotation_3D)); \
/* Definition du centre de rotation tridimensionnel par defaut... */ \
\
Test(IL_FAUT(iterations_diverses_dans_HC_____centrer_la_rotation_3D_dans_la_fenetre)) \
Bblock \
EGAL(X_centre_de_rotation_3D \
,MOYE(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite))) \
); \
EGAL(Y_centre_de_rotation_3D \
,MOYE(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite))) \
); \
EGAL(Z_centre_de_rotation_3D \
,composante_J \
); \
/* Positionnement du centre de rotation tridimensionnelle au centre de la fenetre... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
HCinitialisation(point_apres_rotation \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fx(SOUS(HReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,X_centre_de_rotation_3D \
) \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fy(SOUS(HReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,Y_centre_de_rotation_3D \
) \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fz(SOUS(HReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,Z_centre_de_rotation_3D \
) \
,NEUT(HKmaginaire(point_avant_rotation)) \
); \
/* Rotation du point Argument par rapport aux trois premiers axes... */ \
Eblock \
/* Rotation d'un point hyper-complexe par rapport aux trois premiers axes... */
#define BVARIABLES_F_ITERATION_DANS_HC \
/* Definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(hyper_complexe,point_courant); \
/* Point hyper-complexe courant 'C' dans la fenetre. */ \
DEFV(hyper_complexe,suite_point); \
/* Suite des points hyper-complexes Q lors de l'iteration. */ \
/* n */ \
DEFV(hyper_complexe,point_manoeuvre); \
/* Point hyper-complexe de maneuvre lors de l'iteration. */ \
VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;
#define INITIALISATION_DU_POINT_COURANT_DANS_HC \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
Bblock \
DEFV(hyper_complexe,point_courant_avant_rotation); \
/* Point de manoeuvre... */ \
\
HCinitialisation(point_courant_avant_rotation,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y),composante_J,composante_K); \
/* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image auquel */ \
/* on "adjoint" les 'composante_J' et 'composante_K' pour passer dans l'hyper-espace. */ \
ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_courant,point_courant_avant_rotation); \
/* Rotation (eventuelle) du point courant... */ \
Eblock \
/* Initialisation du point hyper-complexe courant sur un maillage {X,Y}. */
#define TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_hyper_complexe,epsilon) \
Bblock \
EGAL(HReelle(suite_hyper_complexe),TROP_PETIT(HReelle(suite_hyper_complexe),epsilon)); \
EGAL(HImaginaire(suite_hyper_complexe),TROP_PETIT(HImaginaire(suite_hyper_complexe),epsilon)); \
EGAL(HJmaginaire(suite_hyper_complexe),TROP_PETIT(HJmaginaire(suite_hyper_complexe),epsilon)); \
EGAL(HKmaginaire(suite_hyper_complexe),TROP_PETIT(HKmaginaire(suite_hyper_complexe),epsilon)); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des underflows d'une suite hyper-complexe... */
#define TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_hyper_complexe,anti_epsilon) \
Bblock \
EGAL(HReelle(suite_hyper_complexe),TROP_GRAND(HReelle(suite_hyper_complexe),anti_epsilon)); \
EGAL(HImaginaire(suite_hyper_complexe),TROP_GRAND(HImaginaire(suite_hyper_complexe),anti_epsilon)); \
EGAL(HJmaginaire(suite_hyper_complexe),TROP_GRAND(HJmaginaire(suite_hyper_complexe),anti_epsilon)); \
EGAL(HKmaginaire(suite_hyper_complexe),TROP_GRAND(HKmaginaire(suite_hyper_complexe),anti_epsilon)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des overflows d'une suite hyper-complexe... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point,FAUX)));
/* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de */
/* type "MandelBox". On notera que cela n'est pas fait pour les nombres complexes car, en */
/* effet, il suffit d'utiliser les nombres hyper-complexes avec des composantes {J,K} nulles */
/* pour etre dans le plan complexe... */
DEFV(Common,DEFV(Positive,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__nombre_repetitions,UN)));
/* Introduit le 20100520113838 afin de permettre d'iterer ces transformations... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__R,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__R,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__R,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__R,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__R,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__R,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__R,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__I,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__I,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__I,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__I,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__I,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__I,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__I,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__J,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__J,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__J,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__J,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__J,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__J,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__J,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__K,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__K,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__K,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__K,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__K,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__K,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__K,UN)));
#define REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
/* Procedure introduite le 20100602085411... */ \
CON02(IFLT(valeur_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante \
) \
,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn`nom_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante \
) \
) \
,valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn`nom_de_la_composante) \
) \
,IFGT(valeur_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante \
) \
,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp`nom_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante \
) \
) \
,valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp`nom_de_la_composante) \
) \
,NEUT(valeur_de_la_composante) \
) \
/* Repliement d'une composante {R,I,J,K} suivant (avec un "Signe" positif) : */ \
/* */ \
/* ^ */ \
/* | */ \
/* \ | */ \
/* \ | */ \
/* \ yp*. . .* */ \
/* \ | /.\ */ \
/* \ | / . \ */ \
/* \ | / . \ */ \
/* \ | / . \ */ \
/* \ xn |/ . \ 2.xp */ \
/* --------*-----*-----O-----*-----*--------------------> */ \
/* 2.xn \ . /| xp \ */ \
/* \ . / | \ */ \
/* \ . / | \ */ \
/* \ . / | \ */ \
/* \./ | \ */ \
/* *. . .*yn \ */ \
/* | \ */ \
/* | \ */ \
/* */ \
/* (avec "n" pour "Negatif" et "p" pour "Positif"), le "Signe" negatif permettant de faire */ \
/* une symetrie par rapport a l'axe des abscisses... */
#define REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
/* Procedure introduite le 20100602085411... */ \
MUL2(NEGA(valeur_de_la_composante) \
,EXPn(MUL2(SOUS(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante) \
) \
,SOUS(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante) \
) \
) \
,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E`nom_de_la_composante \
) \
) \
/* Repliement d'une composante {R,I,J,K} a l'aide d'un polynome (de degre impair de */ \
/* preference si l'on souhaite "simuler" le "zig-zag" affine par morceaux...) dont les */ \
/* intersections avec les axes sont donnees par les racines {2.xn,0,2.xp}. */
#define REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
/* Procedure introduite le 20100604142838... */ \
SINX(SCAL(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante) \
,PI \
) \
) \
/* Repliement d'une composante {R,I,J,K} a l'aide d'une sinusoide dont les intersections */ \
/* avec les axes sont donnees par les racines {2.xp+k.pi}. */
#define REPLIEMENT_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
MUL2(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S`nom_de_la_composante \
,CON03(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire`nom_de_la_composante) \
,REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial`nom_de_la_composante) \
,REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal`nom_de_la_composante) \
,REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,valeur_de_la_composante \
) \
) \
/* Repliement d'une composante {R,I,J,K}, le "Signe" negatif permettant de faire */ \
/* une symetrie par rapport a l'axe des abscisses... */ \
/* */ \
/* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de */ \
/* type "MandelBox"... */ \
/* */ \
/* Le 20100519110626 fut introduite la possibilite de remplacer ce "zig-zag" par une courbe */ \
/* du troisieme degre (par defaut) de meme allure et dont les intersections avec les axes */ \
/* sont donnees par les racines {2.xn,0,2.xp}. */ \
/* */ \
/* Le 20100604142838 fut introduite la possibilite de remplacer ce "zig-zag" par une */ \
/* sinusoide dont les intersections avec les axes sont donnees par les racines {2.xp+k.pi}. */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__R,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__R,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__I,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__I,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__J,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__J,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__K,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__K,PARAMETRE_D_INVERSION_Rs2)));
#define INVERSION_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante,carre_du_module) \
CON02(IFLE(carre_du_module \
,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
) \
,DIVZ(valeur_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
) \
,IFINof(carre_du_module \
,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2`nom_de_la_composante \
) \
,DIVZ(valeur_de_la_composante \
,carre_du_module \
) \
,valeur_de_la_composante \
) \
/* Inversion d'une composante {R,I,J,K} a l'aide d'un rayon "Inferieur" et d'un rayon */ \
/* "Superieur". Au dessus du rayon "Superieur", la valeur de la composante est conservee. */ \
/* Entre le rayon "Inferieur" et le rayon "Superieur", la composante subit une inversion */ \
/* par rapport a l'hyper-sphere unite. Enfin, en dessous du rayon "Inferieur", la composante */ \
/* subit une inversion "etrange"... */ \
/* */ \
/* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de */ \
/* type "MandelBox"... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__R,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__R,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__I,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__I,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__J,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__J,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__K,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__K,FZERO)));
#define TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
AXPB(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A`nom_de_la_composante \
,valeur_de_la_composante \
,gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B`nom_de_la_composante \
) \
/* Transformation lineaire d'une composante {R,I,J,K}. */ \
/* */ \
/* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de */ \
/* type "MandelBox"... */
#define gF_ITERATION_DANS_HC__INITIALISATIONS_DIVERSES \
Bblock \
BLOC(VIDE;); \
Eblock \
/* Introduit le 20210206174951... */
#define gF_ITERATION_DANS_HC(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* L'argument 'initialisation_point_courant' a ete introduit le 20091012111043, par exemple */ \
/* pour permettre de definir le "point_courant" autrement que comme etant le point courant */ \
/* {X,Y} sur le maillage de l'image (par exemple via deux matrices d'indirection, une pour */ \
/* chaque coordonnee 'X' et 'Y'). */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
INITIALISATION_TRANSFORMATION; \
/* Au cas ou une rotation tridimensionnelle serait demandee... */ \
\
BLOC(initialisation_point_courant); \
/* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image. */ \
\
BLOC(init_iteration); \
/* Initialisation de la suite des nombres hyper-complexes sur le "point_courant", soit : */ \
/* */ \
/* Q = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* Q = C */ \
/* 0 */ \
/* */ \
/* et, initialisation du compteur des iterations. */ \
\
Tant(IFET(test_d_arret \
,PAS_ASSEZ_D_ITERATIONS \
) \
) \
Bblock \
Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point)) \
Bblock \
/* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de */ \
/* type "MandelBox"... */ \
Repe(gF_ITERATION_DANS_HC_____transformer__suite_point__nombre_repetitions) \
Bblock \
/* Introduit le 20100520113838... */ \
Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement)) \
Bblock \
DEFV(hyper_complexe,suite_point_manoeuvre); \
\
HCinitialisation(suite_point_manoeuvre \
,REPLIEMENT_D_UNE_COMPOSANTE(_R,HReelle(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point)) \
); \
/* On notera que les composantes s'appellent {_R,_I,_J,_K}, alors qu'il aurait ete */ \
/* evidemment plus logique de les appeler {R,I,J,K}. Le probleme vient du fait que */ \
/* le symbole 'I' est defini ('v $xil/defi_K1$vv$DEF .define...I.') et ne peut donc */ \
/* etre utilise ici... */ \
HCegal(suite_point,suite_point_manoeuvre); \
/* Repliement de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion)) \
Bblock \
DEFV(Float,INIT(module2__suite_point,HCmodule2(suite_point))); \
DEFV(hyper_complexe,suite_point_manoeuvre); \
\
HCinitialisation(suite_point_manoeuvre \
,INVERSION_D_UNE_COMPOSANTE(_R,HReelle(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point),module2__suite_point) \
); \
HCegal(suite_point,suite_point_manoeuvre); \
/* Inversion de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion)) \
Bblock \
DEFV(hyper_complexe,suite_point_manoeuvre); \
\
HCinitialisation(suite_point_manoeuvre \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_R,HReelle(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point)) \
); \
HCegal(suite_point,suite_point_manoeuvre); \
/* Transformation lineaire de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ERep \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
BLOC(calculs_communs); \
\
INCR(nombre_courant_d_iterations,I); \
\
BLOC(fonc_iteration); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* Q + C */ \
/* n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* Q + A */ \
/* n */ \
/* */ \
\
Test(IL_FAUT(gF_ITERATION_DANS_HC_____replier_l_espace)) \
Bblock \
DEFV(hyper_complexe,suite_point_manoeuvre); \
\
aHCmodulo(suite_point_manoeuvre \
,suite_point \
,gF_ITERATION_DANS_HC_____Rorigine__ \
,gF_ITERATION_DANS_HC_____Rextremite \
,gF_ITERATION_DANS_HC_____Iorigine__ \
,gF_ITERATION_DANS_HC_____Iextremite \
,gF_ITERATION_DANS_HC_____Jorigine__ \
,gF_ITERATION_DANS_HC_____Jextremite \
,gF_ITERATION_DANS_HC_____Korigine__ \
,gF_ITERATION_DANS_HC_____Kextremite \
); \
/* Repliement eventuel de l'espace introduit le 20121103101108... */ \
\
HCegal(suite_point,suite_point_manoeuvre); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
Eblock \
ETan \
\
Test(IL_FAUT(visualisation_arguments_de_sortie)) \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments)) \
Bblock \
EGAL(niveau_courant_precis \
,LRZ3(ponderation_argumentT,HCargumentT_2PI(suite_point) \
,ponderation_argumentP,HCargumentP_2PI(suite_point) \
,ponderation_argumentA,HCargumentA_2PI(suite_point) \
) \
); \
EGAL(niveau_courant \
,GENP(SCAL(niveau_courant_precis \
,CERCLE_TRIGONOMETRIQUE \
,BLANC \
) \
) \
); \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,HCmodule(suite_point) \
); \
EGAL(niveau_courant \
,GENP(SCAL(TRON(niveau_courant_precis \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,BLANC \
) \
) \
); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
/* Test introduit le 20091119165650... */ \
Bblock \
EGAL(niveau_courant_precis \
,CASP_Float(nombre_courant_d_iterations) \
); \
/* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211. */ \
EGAL(niveau_courant \
,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations) \
,SCAL(nombre_courant_d_iterations \
,nombre_maximal_d_iterations \
,BLANC \
) \
,nombre_courant_d_iterations \
) \
) \
); \
/* Visualisation du nombre d'iterations... */ \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,COND(PAS_ASSEZ_D_ITERATIONS \
,fNON_APPARTENANCE_A_L_ENSEMBLE \
,fAPPARTENANCE_A_L_ENSEMBLE \
) \
); \
EGAL(niveau_courant \
,COND(PAS_ASSEZ_D_ITERATIONS \
,NON_APPARTENANCE_A_L_ENSEMBLE \
,APPARTENANCE_A_L_ENSEMBLE \
) \
); \
/* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC'). Cette */ \
/* possibilite a ete introduite le 20091119165650 afin de faciliter les choses... */ \
Eblock \
ETes \
Eblock \
ETes \
/* Calcul du niveau du point, ou l'on notera que 'visualisation_arguments_de_sortie' n'a */ \
/* plus de sens dans les quaternions... */ \
\
RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
/* Et enfin, marquage du point courant. */ \
\
BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
Eblock
DEFV(Common,DEFV(Logical,ZINT(F_ITERATION_DANS_HC_____compatibilite_20110825,FAUX)));
/* Introduit le 20110825111448 car, en effet pour le calcul du carre, les methodes */
/* 'HCproduit(...)' et 'HCpuissance(...)' ne donnent evidemment le meme resultat que */
/* si le produit theorique est utilise. Dans le cas contraire, on a : */
/* */
/* 2 */
/* q # 1.q.q */
/* */
/* ce que j'avais neglige dans un premier temps... */
#define F_ITERATION_DANS_HC(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
Test(IFET(IL_FAUT(F_ITERATION_DANS_HC_____compatibilite_20110825),IFNE(exposant,FDEUX))) \
Bblock \
PRINT_ATTENTION("la compatibilite 20110825 des iterations hyper-complexes impose le second degre"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
gF_ITERATION_DANS_HC(test_d_arret \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_HC; \
Eblock \
) \
/* Introduit le 20091012111043... */ \
,BLOC(init_iteration); \
,BLOC(Bblock \
Test(IL_NE_FAUT_PAS(F_ITERATION_DANS_HC_____compatibilite_20110825)) \
Bblock \
aHCpuissance(point_manoeuvre,suite_point,exposant); \
/* Calculons : */ \
/* */ \
/* 2 */ \
/* Q */ \
/* n */ \
/* */ \
/* a priori (mais cela peut etre inutile dans certains cas...). */ \
/* */ \
/* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui */ \
/* heureusement ici n'a pas d'importance... */ \
/* */ \
/* Le 20091118113333 : */ \
/* */ \
/* HCproduit(point_manoeuvre,suite_point,suite_point); */ \
/* */ \
/* a ete remplace par : */ \
/* */ \
/* HCpuissance(point_manoeuvre,suite_point,exposant) */ \
/* */ \
/* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite */ \
/* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les */ \
/* calculs), en fait 'DEUX' sera utilise... */ \
/* */ \
/* Le 20110826090921, on notera un point important. Soient les deux quaternions suivants : */ \
/* */ \
/* Qa = A + i.B + j.C + k.0 = A + i.B + j.C */ \
/* - - - */ \
/* Qb = A + i.B + j.0 + k.C = A + i.B + k.C */ \
/* - - - */ \
/* */ \
/* ou donc il n'y a que trois composantes non nulles et ou ils different par le fait que */ \
/* 'C' pondere 'j' et 'k' respectivement. Leurs carres valent respectivement : */ \
/* */ \
/* 2 2 2 2 */ \
/* Qa = (A -B -C ) + i.2.A.B + j.2.A.C */ \
/* - */ \
/* */ \
/* 2 2 2 2 */ \
/* Qb = (A -B -C ) + i.2.A.B + k.2.A.C */ \
/* - */ \
/* */ \
/* et on a donc : */ \
/* */ \
/* 2 2 */ \
/* |Qa | = |Qb | */ \
/* */ \
/* La moralite de cela est que calculer les deux fractales {J=valeur,K=0} et {J=0,K=valeur} */ \
/* donnera en fait le meme resultat, puisque c'est le module des carres qui est utilise lors */ \
/* des tests d'appartenance aux ensembles calcules... */ \
Eblock \
ATes \
Bblock \
aHCproduit(point_manoeuvre,suite_point,suite_point); \
/* Possibilite introduite le 20110825111448... */ \
Eblock \
ETes \
Eblock \
) \
,BLOC(fonc_iteration); \
,BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
); \
Eblock
/*===================================================================================================================================*/
/* :Debut_listMN_MANDELBROT_QUATERNION_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Q = 0 */
/* 0 */
/* */
/* 2 */
/* Q = Q + C */
/* n+1 n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Si |Q | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Mandelbrot. */
/* */
/* */
/* Forme generale d'une section tridimensionnelle : */
/* */
/* */
/* : */
/* ++--:: */
/* +++----:::.. */
/* +++++--::... */
/* oooo+o+----::.. */
/* * ooooo++++--::.. */
/* ----:***oooooo++------. --: */
/* ++++++-o*****ooo++++++----+---: */
/* ++o+++o*****ooo+++++++++o+++-::: */
/* ooooo+o********oooooo++o+o++-::::. */
/* +-- -- ooooooo**#***#**oooooooooooo+-----. */
/* ++++--++---- ooooooo######***ooooooooooo++++--:. */
/* o+++++++++++++-o**ooo***####*****o**oooo*oo+++---:: */
/* - o+++++o++++++o*****o**#####********oo*o*oooo+---:: */
/* +ooo+++oo++++++o*******########************ooo+---:: */
/* - +-oooooo+ooooo+++********#########***********ooo----:: */
/* +ooooooooooooo++*******#########************ooo+---: */
/* oooooooooooo+++*******#########************ooo+---: */
/* oooo++oo++++++*******#########************ooo++--: */
/* o+++++o++++- o******#########************ooo+--- */
/* o+++ + o*******########************o++++-: */
/* *******#########*****oo*o**o+---- */
/* ***ooo*########******oooo*oo++--- */
/* oooooo*#*###***ooooooo+o*ooo++ */
/* o+o++*#####****oo++o++. o++ */
/* *#####****o++-- */
/* ####*##oooo++- */
/* #****oo+--- */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_MANDELBROT_QUATERNION_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
/* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HC_____exposant,FDEUX)));
/* Introduit le 20091118113333... */
/* */
/* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite... */
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Imandelbrot_dans_HC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Imandelbrot_dans_HC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_HC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes */
/* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent */
/* les composantes 'HJmaginaire' et 'HKmaginaire'... */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de */
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HC
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
begin_image
Bblock
F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Imandelbrot_dans_HC_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_HC_____charger_____l_etat_initial))
Bblock
HCegal(suite_point,loadHJ_point(Imandelbrot_dans_HC_____etat_initial,X,Y));
Eblock
ATes
Bblock
HCegal(suite_point,HC_____quaternion__0__0__0__0);
/* Initialisation de la suite des nombres hyper-complexes sur l'origine, soit : */
/* */
/* Q = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
/* entre Julia et Mandelbrot ne serait plus evidente... */
Eblock
ETes
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
aHCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* Q + C */
/* n */
/* */
/* ou 'C' designe le point hyper-complexe Courant. */
Eblock
)
,Imandelbrot_dans_HC_____exposant
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_HC_____sauvegarder_l_etat_final__))
Bblock
storeHJ_point(suite_point,Imandelbrot_dans_HC_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_JULIA_QUATERNION_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E J U L I A D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Q = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* 2 */
/* Q = Q + A */
/* n+1 n */
/* */
/* (ou 'A' designe un nombre hyper-complexe */
/* Argument arbitraire). */
/* */
/* Si |Q | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Julia */
/* calcule pour le nombre hyper-complexe 'A'. */
/* */
/* */
/* Forme generale d'une section tridimensionnelle : */
/* */
/* */
/* . ..... */
/* .. .. ---:::: */
/* ......... ..++---- */
/* .......:... :-o++++++ */
/* :.....::---:.. +oooo++++ */
/* ::::::::-+++-::.:::oooooooo+ */
/* :::::::::++++------oooooooo.. */
/* +::::::..+ooo+++++o****oooo.. */
/* ++ ::...ooooo++++*********... */
/* +o +oooo***ooo********............ */
/* +oo +oooooo************............ */
/* +oooooooooooo*########*:::......::. */
/* oooooooooooo#########:::::::::::: */
/* +ooooooo+++#########:::::::::::-: */
/* oooooo++++#######-:::::::::---- */
/* ooo+++++--#####---::::-------- */
/* +++++++--#####--------------+++ */
/* ++++++---#####-------------+++- */
/* +++----####--::--------+++++- */
/* ------###:::::::-----++++++++ */
/* --:####:::::::----++++ooo++ */
/* ::####....:::-+++++ooooo++ */
/* ###### :-+++++ooooooo+ */
/* ####### --+ooo++ooooooo++.. */
/* ######## **oooooooooooooooo+..: */
/* #########oooooooooooo+ooooo+.:::::: */
/* #########**ooooooooooo+:::oo+:::::::: */
/* ***************oooooo+--:::::++::::::. */
/* *********+++-oooooo+++--:::::.+++--:.. */
/* *ooo****o+++--:.o+++++---:::...+---:.. */
/* ooooooooo++- --:.. */
/* +++oooo+. :. */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_JULIA_QUATERNION_11: */
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____faire_la_rotation_de__nombre_argument,VRAI)));
/* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation */
/* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____exposant,FDEUX)));
/* Introduit le 20091118113333... */
/* */
/* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
/* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans ce cas */
/* particulier (introduit le 20091118181636)... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____ponderation__point_courant_C,FZERO)));
/* Introduit le 20130825092858... */
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Ijulia_dans_HC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Ijulia_dans_HC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_HC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,ARGUMENT_POINTERs(nombre_argument)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes */
/* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent */
/* les composantes 'HJmaginaire' et 'HKmaginaire'... */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(nombre_argument)));
/* Nombre hyper-complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de */
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HC
DEFV(hyper_complexe,point_argument);
/* Point hyper-complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
Test(IL_FAUT(Ijulia_dans_HC_____faire_la_rotation_de__nombre_argument))
/* Test introduit le 20100303081954... */
Bblock
ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle. Il y avait */
/* autrefois : */
/* */
/* HCegal(point_argument,INDIRECT(nombre_argument)); */
/* */
/* avant que les rotations ne soient introduites... */
Eblock
ATes
Bblock
HCegal(point_argument,INDIRECT(nombre_argument));
/* Cas ou la rotation de 'nombre_argument' est inhibee... */
Eblock
ETes
begin_image
Bblock
F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Ijulia_dans_HC_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_HC_____charger_____l_etat_initial))
Bblock
HCegal(suite_point,loadHJ_point(Ijulia_dans_HC_____etat_initial,X,Y));
Eblock
ATes
Bblock
HCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Q = C */
/* 0 */
/* */
Eblock
ETes
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
DEFV(hyper_complexe,point_manoeuvre_1);
aHCcombinaison_lineaire_2(point_manoeuvre_1
,Ijulia_dans_HC_____ponderation_point_argument_A,point_argument
,Ijulia_dans_HC_____ponderation__point_courant_C,point_courant
);
aHCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
/* Puis : */
/* */
/* 2 */
/* Q + A */
/* n */
/* */
/* ou 'A' designe le point hyper-complexe Argument. */
/* */
/* Ou plus generalement (introduit le 20130825092858) : */
/* */
/* 2 */
/* Q + p .A + p .C */
/* n A C */
/* */
/* avec pA=1 et pC=0 par defaut... */
Eblock
)
,Ijulia_dans_HC_____exposant
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_HC_____sauvegarder_l_etat_final__))
Bblock
storeHJ_point(suite_point,Ijulia_dans_HC_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E V E R H U L S T D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Q = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* Q = R.Q .(1 - Q ) */
/* n+1 n n */
/* */
/* (ou 'R' designe un nombre reel Argument */
/* arbitraire appele "taux de croissance"). */
/* */
/* Si |Q | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Verhulst */
/* calcule pour le nombre reel 'R'. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* .........................#.###########.#........................ */
/* ........................#################....................... */
/* ............####.......###################.......####........... */
/* .........##########...#####################...##########........ */
/* ....###..###########..#####################..###########..###... */
/* ################################################################ */
/* ....###..###########..#####################..###########..###... */
/* .........##########...#####################...##########........ */
/* ............####.......###################.......####........... */
/* ........................#################....................... */
/* .........................#.###########.#........................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_HC_____utiliser_la_forme_la_plus_simple,VRAI)));
/* Faut-il utiliser la forme ('VRAI') : */
/* */
/* Q = R.Q .(1 - Q ) */
/* n+1 n n */
/* */
/* ou bien la forme ('FAUX') : */
/* */
/* 2 */
/* Q = (R+1).Q - R.Q */
/* n+1 n n */
/* */
/* Ceci a ete introduit le 20040921105449. */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
/* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans le cas */
/* particulier du calcul de l'ensemble de Verhulst. ATTENTION : j'ai utilise quelque temps */
/* la valeur suivante : */
/* */
/* EXP2(FLOT(MILLE)) */
/* */
/* mais, je prefere revenir a la valeur standard... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_HC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,ARGUMENT_POINTERs(taux_de_croissance)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
)
)
)
)
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes */
/* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent */
/* les composantes 'HJmaginaire' et 'HKmaginaire'... */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(taux_de_croissance)));
/* Taux de croissance hyper-complexe 'R' de l'ensemble de Verhulst que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de */
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HC
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
begin_image
Bblock
F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Iverhulst_dans_HC_____seuil_du_carre_du_module)
,BLOC(Bblock
HCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Q = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(Iverhulst_dans_HC_____utiliser_la_forme_la_plus_simple))
/* Ce test a ete introduit le 20040921105449... */
Bblock
DEFV(hyper_complexe,point_manoeuvre_1);
DEFV(hyper_complexe,point_manoeuvre_2);
/* Points hyper-complexes de maneuvre lors de l'iteration. */
aHCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
/* Calcul de : */
/* */
/* 1 - Q = -Q + 1 */
/* n n */
/* */
aHCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
/* Calcul de : */
/* */
/* Q .(1 - Q ) */
/* n n */
/* */
/* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui */
/* signifie que : */
/* */
/* Q .(1 - Q ) # (1 - Q ).Q */
/* n n n n */
/* */
aHCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
/* Calcul de : */
/* */
/* Q = R.Q .(1 - Q ) */
/* n+1 n n */
/* */
/* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui */
/* signifie que : */
/* */
/* R.Q # Q.R */
/* */
Eblock
ATes
Bblock
/* Cette formulation a ete introduite le 20040921105449... */
DEFV(hyper_complexe,point_manoeuvre_1);
DEFV(hyper_complexe,point_manoeuvre_2);
DEFV(hyper_complexe,point_manoeuvre_3);
DEFV(hyper_complexe,point_manoeuvre_4);
/* Points hyper-complexes de maneuvre lors de l'iteration. */
aHCproduit(point_manoeuvre_1,suite_point,suite_point);
/* Calcul de : */
/* */
/* 2 */
/* Q */
/* n */
/* */
aHCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
/* Calcul de : */
/* */
/* 2 */
/* R.Q */
/* n */
/* */
aHCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
/* Calcul de : */
/* */
/* R+1 */
/* */
aHCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
/* Calcul de : */
/* */
/* (R+1).Q */
/* n */
/* */
aHCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
/* Calcul de : */
/* */
/* 2 */
/* Q = (R+1).Q - R.Q */
/* n+1 n n */
/* */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'HCpuissance(...)'. */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E S R A C I N E S N - I E M E S D E L ' U N I T E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_HC_____seuil_du_carre_du_module,F_INFINI)));
/* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans le cas */
/* particulier de la recherche des racines n_iemes de l'unite... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_HC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,exposant
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentT
,ponderation_argumentP
,ponderation_argumentA
)
)
)
)
/* Fonction introduite le 20061205143352... */
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes */
/* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent */
/* les composantes 'HJmaginaire' et 'HKmaginaire'... */
DEFV(Argument,DEFV(Positive,exposant));
/* Exposant 'N'. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
/* Cet indicateur logique permet de choisir le type d'information que l'on va visualiser... */
/* */
/* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument */
/* de sortie qui permet de visualiser la racine (parmi les N) vers laquelle on converge, */
/* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les N arguments possibles */
/* sont tres differents les uns des autres et se distinguent par les couleurs. C'est la */
/* raison pour laquelle cet argument n'est pas un parametre des programmes appelant */
/* ('v $xrc/racN.41$K visualisation_arguments_de_sortie')... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HC
DEFV(hyper_complexe,exposant_quaternionique_moins_1);
/* Exposant complexe moins 1. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
begin_image
Bblock
F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Iracines_n_iemes_de_l_unite_dans_HC_____seuil_du_carre_du_module)
,BLOC(Bblock
HCinitialisation(exposant_quaternionique_moins_1
,FLOT(PRED(exposant)),I0_Quaternion,J0_Quaternion,K0_Quaternion
);
/* Conversion complexe de l'exposant moins 1. */
HCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* Q = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IZNE(HCmodule2(suite_point)))
Bblock
DEFV(hyper_complexe,point_manoeuvre_1);
DEFV(hyper_complexe,point_manoeuvre_3);
DEFV(hyper_complexe,point_manoeuvre_4);
DEFV(hyper_complexe,point_manoeuvre_5);
DEFV(hyper_complexe,point_manoeuvre_6);
DEFV(hyper_complexe,point_manoeuvre_7);
/* Points complexes de maneuvre lors de l'iteration. */
aHCexponentielle_quaternionique(point_manoeuvre_6,suite_point,exposant_quaternionique_moins_1);
/* Calcul de : */
/* */
/* N-1 */
/* Q */
/* n */
/* */
aHCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
/* Calcul de : */
/* */
/* N */
/* Q */
/* n */
/* */
aHCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
/* Calcul de : */
/* */
/* N-1 */
/* N.Q */
/* n */
/* */
aHCdifference(point_manoeuvre_3,point_manoeuvre_7,HC_____quaternion_p1__0__0__0);
/* Puis de : */
/* */
/* N */
/* Q - 1 */
/* n */
/* */
aHCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
/* Puis de : */
/* */
/* N */
/* Q - 1 */
/* n */
/* --------- */
/* N-1 */
/* N.Q */
/* n */
/* */
aHCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
HCegal(suite_point,point_manoeuvre_5);
/* Puis de : */
/* */
/* N */
/* Q - 1 */
/* n */
/* Q = Q - -------- */
/* n+1 n N-1 */
/* N.Q */
/* n */
/* */
Eblock
ATes
Bblock
/* L'origine (0,0) est un point particulier... */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'HCpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D ' U N P O L Y N O M E V A R I A B L E Q U E L C O N Q U E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* Q = C */
/* 0 */
/* */
/* Q = polynome(Q ) */
/* n+1 n */
/* */
/* (ou 'C' designe le point Courant). */
/* */
/* La fonction 'polynome(...)' est definie */
/* par (la translation 't' de l'exposant pouvant */
/* etre negative a compter du 20100316172716) : */
/* */
/* 0+t 1+t p+t */
/* polynome(Q) = A .Q + A .Q + ... + A .Q + alpha.A + beta.C */
/* 0 1 p */
/* */
/* (ou 'A' et 'C' designent respectivement un */
/* nombre complexe arbitraire Argument et le */
/* point Courant). Quant a la suite de coefficients */
/* {A0,A1,...,Ap} elle est definie a partir d'un album */
/* d'images (indexe par 'Z' -majuscule-). */
/* */
/* Mais ATTENTION, si cela permet de faire varier */
/* localement le polynome au point {X,Y} on notera */
/* bien que : */
/* */
/* C # X + i.Y + ... */
/* */
/* a priori (les coordonnees {X,Y} sont relatives */
/* a une image, alors que 'C' est dans l'espace */
/* hyper-complexe. Cela signifie que lors d'un changement */
/* de la fenetre de calcul {coin_bas_gauche,coin_haut_droite} */
/* (par zoom et/ou translation), les coefficients {A0,A1,...,Ap} */
/* du polynome, eux, resteront les memes... */
/* */
/* Enfin, on notera deux choix importants possibles : */
/* */
/* {alpha=1,beta=0} : ensemble de type "Julia", */
/* {alpha=0,beta=1} : ensemble de type "Mandelbrot", */
/* */
/* toutes les autres combinaisons etant evidemment */
/* possibles... */
/* */
/* Le 20100210133645 a ete introduite la possibilite de */
/* parametrer localement en {X,Y} et partiellement le produit */
/* non theorique (s'il est active) par {exposa1_Rho,ponder1_Theta,ponder1_Phi,ponder1_Alpha}. */
/* */
/* */
/* Nota important : */
/* */
/* La definition du polynome, comme la definition */
/* du parametrage du produit non theorique, n'ont */
/* reellement de sens que lorsqu'un seule 'imageR' */
/* est calculee puisque dans le cas contraire, ce */
/* sont les memes definitions qui seront utilisees */
/* pour d'autres images. Pour bien faire, il conviendrait */
/* de les rendre "multidimensionnelles"... */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____faire_la_rotation_de__nombre_argument_A,VRAI)));
/* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation */
/* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires... */
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Theta_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Phi__,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Alpha,VRAI)));
/* Introduit le 20100221090225 a cause de 'v $ximcd/operator$FON 20100210182653'... */
DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____premier_exposant_du_polynome,ZERO)));
/* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances */
/* negatives de 'Z'... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_HC(imageR
,definition_du_polynome
,definition_de_exposa1_Rho__
,definition_de_ponder1_Theta_
,definition_de_ponder1_Phi__
,definition_de_ponder1_Alpha
,ponderation_du_nombre_argument_A
,ARGUMENT_POINTERs(nombre_argument_A)
,ponderation_du_nombre_courant_C
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,nombre_maximal_d_iterations
,seuil_du_carre_du_module
,visualisation_arguments_de_sortie
,ponderation_argumentT
,ponderation_argumentP
,ponderation_argumentA
)
)
)
)
/* Fonction introduite le 20040510140001... */
DEFV(Argument,DEFV(image,imageR));
/* Image Resultat a generer. */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
/* Definition du polynome variable (en {X,Y}) a l'aide d'un album. */
DEFV(Argument,DEFV(imageF,definition_de_exposa1_Rho__));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Theta_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Phi__));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Alpha));
/* Definition du parametrage partiel eventuel du "faux" produit (introduit le */
/* 20100210133645). */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_argument_A));
/* Ponderation du nombre complexe argument 'A' (dit 'alpha' dans 'alpha.A + beta.C'). */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(nombre_argument_A)));
/* Nombre hyper-complexe argument 'A'. */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_courant_C));
/* Ponderation du nombre hyper-complexe courant 'C' (dit 'beta' dans 'alpha.A + beta.C'). */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes */
/* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent */
/* les composantes 'HJmaginaire' et 'HKmaginaire'... */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
/* Seuil du carre du module definissant l'arret des iterations. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de */
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HC
DEFV(hyper_complexe,nombre_argument_A_apres_transformation_eventuelle);
/* Point hyper-complexe argument apres transformation eventuelle... */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision (introduit le */
/* 20061219090342). */
Test(IL_FAUT(Iiteration_polynome_variable_quelconque_dans_HC_____faire_la_rotation_de__nombre_argument_A))
/* Test introduit le 20100303081954... */
Bblock
ROTATION_TRIDIMENSIONNELLE_DANS_HC(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
/* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle. Ceci fut */
/* introduit le 20100227094911 car cela manquait dramatiquement... */
Eblock
ATes
Bblock
HCegal(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
/* Cas ou la rotation de 'nombre_argument' est inhibee... */
Eblock
ETes
begin_image
Bblock
#define prendre_la_partie_entiere_de_ponder1_Theta_ \
Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Theta_
#define prendre_la_partie_entiere_de_ponder1_Phi__ \
Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Phi__
#define prendre_la_partie_entiere_de_ponder1_Alpha \
Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Alpha
/* Afin de raccourcir des lignes qui suivent... */
gF_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil_du_carre_du_module)
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_HC;
Eblock
)
/* Introduit le 20091012111043... */
,BLOC(Bblock
HCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-complexes avec : */
/* */
/* Q = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(VIDE;
)
,BLOC(Bblock
DEFV(hyper_complexe,puissance_courante);
DEFV(hyper_complexe,polynome_courant);
BSaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__exposa1_Rho__
,loadF_point(definition_de_exposa1_Rho__,X,Y)
);
BSaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Theta_
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Theta_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_Theta_,X,Y)
)
);
BSaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Phi__
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Phi__)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_Phi__,X,Y)
)
);
BSaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Alpha
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Alpha)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_Alpha,X,Y)
)
);
/* Parametrage partiel eventuel du "faux" produit (introduit le 20100210133645). On notera */
/* que cela n'a d'utilite que si le produit non theorique est active et alors il n'est */
/* utilise que pour l'unique 'HCproduit(...)' qui suit... */
aHCpuissance(puissance_courante
,point_courant
,Iiteration_polynome_variable_quelconque_dans_HC_____premier_exposant_du_polynome
);
/* Avant le 20100316172716, il y avait ici : */
/* */
/* HCinitialisation(puissance_courante, */
/* ,R1_Quaternion */
/* ,I0_Quaternion */
/* ,J0_Quaternion */
/* ,K0_Quaternion */
/* ); */
/* */
/* ce qui revient au meme lorsque l'exposant est nul : */
/* */
/* 0 */
/* puissance(Q) = Q = {1,0,0,0} */
/* */
/* ce qui est le cas par defaut... */
aHCcombinaison_lineaire_2(polynome_courant
,ponderation_du_nombre_argument_A
,nombre_argument_A_apres_transformation_eventuelle
,ponderation_du_nombre_courant_C
,point_courant
);
/* Definition du polynome et initialisation avec : */
/* */
/* polynome(Q) = alpha.A + beta.C */
/* */
/* */
begin_fuite
Bblock
DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
DEFV(hyper_complexe,monome_courant);
aHCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
aHCsomme(polynome_courant,polynome_courant,monome_courant);
/* Calcul iteratif du polynome courant : */
/* */
/* 0 1 p */
/* polynome(Q) = A .Q + A .Q + ... + A .Q + alpha.A + beta.C */
/* 0 1 p */
/* */
/* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'... */
aHCproduit(puissance_courante,puissance_courante,suite_point);
/* Calcul de la puissance courante suivante (Z+1) : */
/* */
/* Z+1 */
/* puissance(Q) = Q */
/* */
Eblock
end_fuite
HCegal(suite_point,polynome_courant);
/* Et iteration de la fonction : */
/* */
/* Q = polynome(Q ) */
/* n+1 n */
/* */
ESaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Alpha
);
ESaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Phi__
);
ESaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__ponder1_Theta_
);
ESaveModifyVariable(Float
,FHCproduit_____avec_le_produit_non_theorique__exposa1_Rho__
);
/* Parametrage partiel eventuel du "faux" produit (introduit le 20100210133645). */
Eblock
)
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
#undef prendre_la_partie_entiere_de_ponder1_Alpha
#undef prendre_la_partie_entiere_de_ponder1_Phi__
#undef prendre_la_partie_entiere_de_ponder1_Theta_
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
#undef SEUIL_MODULE_DANS_HC
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N E S U I T E Q U E L C O N Q U E */
/* D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC \
/* Definition des variables communes a toutes les fonctions calculant une suite quelconque */ \
/* dans l'espace Hyper-Complexe. */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(hyper_complexe,point_courant); \
/* Point hyper-complexe courant 'C' dans la fenetre. */
#define F_ITERATION_QUELCONQUE_DANS_HC(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut) \
Bblock \
DEFV(Int,INIT(numero_de_l_iteration,UNDEF)); \
/* Indice 'n' de la suite 'X'... */ \
DEFV(hyper_complexe,element_courant_de_la_suite_Pn); \
/* Element courant Z de la suite. */ \
/* n */ \
BLOC(initialisation); \
/* Initialisation de la suite definissant le systeme dynamique... */ \
\
DoIn(numero_de_l_iteration \
,premiere_iteration_effective \
,LSTX(premiere_iteration_absolue,nombre_d_iterations) \
,I \
) \
Bblock \
BLOC(iteration); \
/* Calcul du systeme dynamique par iteration du calcul de la suite... */ \
\
Test(IL_FAUT(test_defaut)) \
Bblock \
TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(element_courant_de_la_suite_Pn \
,iterations_dans_C_HC_HHC_____epsilon \
); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au */ \
/* carre lors de l'eventuelle iteration suivante... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock \
EDoI \
\
storeHJ_point(element_courant_de_la_suite_Pn \
,imageR \
,X,Y \
); \
/* Generation de l'image "hyper_complexe"... */ \
Eblock \
/* Calcul general d'une suite quelconque dans l'espace hyper-complexe... */ \
/* */ \
/* On notera le 20050316114436 (un peu tard...) que 'F_ITERATION_QUELCONQUE_DANS_HC' */ \
/* n'est pas utilise et fut introduit par symetrie avec 'F_ITERATION_QUELCONQUE_DANS_C' */ \
/* et donc pour prevoir des extensions futures... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S C A L C U L A N T */
/* U N E F O N C T I O N H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionHJ_I_FONCTION_HC POINTERHJ
#define GENERE__FonctionHJ_I_FONCTION_HC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom) \
DEFV(FonctionHJ,POINTERHJ(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(imageHJ,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
DEFV(Argument,DEFV(Float,composante_J)); \
DEFV(Argument,DEFV(Float,composante_K)); \
/* Composantes complementaires definissant l'espace hyper-complexe... */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
begin_image \
Bblock \
DEFV(hyper_complexe,point_courant_transforme); \
\
INITIALISATION_DU_POINT_COURANT_DANS_HC; \
/* Initialisation du "point Courant" 'C'. */ \
\
HCforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta); \
/* Transformation homographique du "point Courant" 'C'. */ \
\
CALS(Nfonction(point_courant_transforme)); \
/* Application de la transformation... */ \
\
storeHJ_point(Vfonction \
,imageR \
,X,Y \
); \
/* Generation de l'image "hyper_complexe"... */ \
Eblock \
end_image \
\
RETIHJ(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' cos ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_cosinus_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"cos" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sin ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_sinus_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sin" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' tg ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_tangente_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"tg" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' ch ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_cosinus_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"ch" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sh ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_sinus_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sh" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' th ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_tangente_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"th" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' exp ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_exponentielle_neperienne_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"exp" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' log ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHJ
DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_logarithme_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"log" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHJ
#undef GENERE__FonctionHJ_I_FONCTION_HC
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S I T E R A N T */
/* U N E F O N C T I O N H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionP_I_ITERAT_F_HC POINTERp
#define GENERE__FonctionP_I_ITERAT_F_HC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module) \
/* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees */ \
/* a la recuperation automatique des fichiers d'arguments ; on trouvera donc : */ \
/* */ \
/* GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction) */ \
/* */ \
/* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre */ \
/* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f'). */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* mais : */ \
/* */ \
/* DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(image,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
DEFV(Argument,DEFV(Float,composante_J)); \
DEFV(Argument,DEFV(Float,composante_K)); \
/* Composantes complementaires definissant l'espace hyper-complexe... */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations)); \
/* Nombre maximal d'iterations demande. */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie)); \
/* Cet indicateur logique permet de choisir le type d'information que */ \
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */ \
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */ \
/* n */ \
DEFV(Argument,DEFV(Float,ponderation_argumentT)); \
DEFV(Argument,DEFV(Float,ponderation_argumentP)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA)); \
/* Cet indicateur logique permet de choisir le type d'information que */ \
/* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de */ \
/* de Q lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */ \
/* n */ \
/* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}. */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_DANS_HC \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
\
gF_ITERATION_DANS_HC__INITIALISATIONS_DIVERSES; \
\
begin_image \
Bblock \
gF_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil_du_carre_du_module) \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_HC; \
Eblock \
) \
,BLOC(Bblock \
HCegal(suite_point,point_courant); \
/* Initialisation de la suite des nombres hyper_complexes sur le "point Courant" 'C', */ \
/* soit : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
EGAL(nombre_courant_d_iterations,UN); \
/* Initialisation du compteur des iterations ; ce compteur est initialise */ \
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */ \
/* valeur non nulle soit rangee... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
,BLOC(Bblock \
CALS(Nfonction(suite_point)); \
HCegal(suite_point,Vfonction); \
/* Et iteration de la fonction : */ \
/* */ \
/* Z = Nfonction(Z ) */ \
/* n n */ \
/* */ \
/* en notant qu'il est preferable de ne pas ecrire : */ \
/* */ \
/* HCegal(suite_point,Nfonction(suite_point)); */ \
/* */ \
/* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON HCegal', */ \
/* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
); \
Eblock \
end_image \
\
RETI(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' cos ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_HC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_cosinus_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_circulaire_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sin ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_HC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_sinus_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_circulaire_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' tg ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_HC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_tangente_circulaire_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_circulaire_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' ch ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_HC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_cosinus_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_hyperbolique_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sh ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_HC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_sinus_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_hyperbolique_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' th ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_HC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_tangente_hyperbolique_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_hyperbolique_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' exp ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_HC_____seuil,FLOT(MILLIARD))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_exponentielle_neperienne_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFHCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_exponentielle_neperienne_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' log ' H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_HC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_logarithme_dans_HC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentT /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentP /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme /* Common,DEFV(Fonction,) : \ */
,fFHClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_logarithme_dans_HC_____seuil /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
#undef GENERE__FonctionP_I_ITERAT_F_HC
#undef TEST_DU_CARRE_DU_MODULE_DANS_HC
#undef F_ITERATION_DANS_HC
#undef gF_ITERATION_DANS_HC
#undef TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE
#undef INVERSION_D_UNE_COMPOSANTE
#undef REPLIEMENT_D_UNE_COMPOSANTE
#undef REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE
#undef REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE
#undef REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE
#undef F_ITERATION_QUELCONQUE_DANS_HC
#undef BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC
#undef TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE
#undef TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE
#undef INITIALISATION_DU_POINT_COURANT_DANS_HC
#undef BVARIABLES_F_ITERATION_DANS_HC
#undef ROTATION_TRIDIMENSIONNELLE_DANS_HC
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N T R O L E D E L ' A R I T H M E T I Q U E E T E N D U E */
/* L O R S D E C A L C U L S S U R L E S N O M B R E S H Y P E R - H Y P E R - C O M P L E X E S : */
/* */
/* */
/* Nota : */
/* */
/* Tout cela fut introduit le 20110802111915 */
/* au cas ou l'utilite s'en manifesterait... */
/* */
/*************************************************************************************************************************************/
#ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES));
#Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES));
#Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S E U I L D U M O D U L E : */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Nota : */
/* */
/* Tout cela fut introduit le 20110802111915 */
/* au cas ou l'utilite s'en manifesterait... */
/* */
/*************************************************************************************************************************************/
#define TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil) \
IFLT(HHCmodule2(suite_point),seuil) \
/* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_HHC(...)'. */
#define SEUIL_MODULE_DANS_HHC \
EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____seuil_du_carre_du_module
,SEUIL_MODULE_DANS_HHC
)
)
);
/* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E P L I E M E N T E V E N T U E L D E L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Jorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Jextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Korigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Kextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Sorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Sextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Torigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Textremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Uorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Uextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Vorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Vextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
/* Possibilite introduite le 20121103095740... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S N E C E S S A I R E S A U C A L C U L E N " F L O T T A N T " */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Nota : */
/* */
/* Tout cela fut introduit le 20110802111915 */
/* au cas ou l'utilite s'en manifesterait... */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_diverses_dans_HHC_____centrer_la_rotation_3D_dans_la_fenetre,FAUX)));
/* Introduit le 20121227110206 afin de faciliter le changement de centre de rotation... */
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____X_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____Y_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____Z_centre_de_rotation_3D,FZERO)));
#define ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_apres_rotation,point_avant_rotation) \
Bblock \
DEFV(Float,INIT(X_centre_de_rotation_3D,iterations_diverses_dans_HHC_____X_centre_de_rotation_3D)); \
DEFV(Float,INIT(Y_centre_de_rotation_3D,iterations_diverses_dans_HHC_____Y_centre_de_rotation_3D)); \
DEFV(Float,INIT(Z_centre_de_rotation_3D,iterations_diverses_dans_HHC_____Z_centre_de_rotation_3D)); \
/* Definition du centre de rotation tridimensionnel par defaut... */ \
\
Test(IL_FAUT(iterations_diverses_dans_HHC_____centrer_la_rotation_3D_dans_la_fenetre)) \
Bblock \
EGAL(X_centre_de_rotation_3D \
,MOYE(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite))) \
); \
EGAL(Y_centre_de_rotation_3D \
,MOYE(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite))) \
); \
EGAL(Z_centre_de_rotation_3D \
,composante_J \
); \
/* Positionnement du centre de rotation tridimensionnelle au centre de la fenetre... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
HHCinitialisation(point_apres_rotation \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fx \
(SOUS(HHReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HHImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HHJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,X_centre_de_rotation_3D \
) \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fy \
(SOUS(HHReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HHImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HHJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,Y_centre_de_rotation_3D \
) \
,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fz \
(SOUS(HHReelle(point_avant_rotation) \
,X_centre_de_rotation_3D \
) \
,SOUS(HHImaginaire(point_avant_rotation) \
,Y_centre_de_rotation_3D \
) \
,SOUS(HHJmaginaire(point_avant_rotation) \
,Z_centre_de_rotation_3D \
) \
,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
) \
,Z_centre_de_rotation_3D \
) \
,NEUT(HHKmaginaire(point_avant_rotation)) \
,NEUT(HHSmaginaire(point_avant_rotation)) \
,NEUT(HHTmaginaire(point_avant_rotation)) \
,NEUT(HHUmaginaire(point_avant_rotation)) \
,NEUT(HHVmaginaire(point_avant_rotation)) \
); \
/* Rotation du point Argument par rapport aux trois premiers axes... */ \
Eblock \
/* Rotation d'un point hyper-hyper-complexe par rapport aux trois premiers axes... */
#define BVARIABLES_F_ITERATION_DANS_HHC \
/* Definition des variables communes a 'Julia' et 'Mandelbrot'. */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(hyper_hyper_complexe,point_courant); \
/* Point hyper-hyper-complexe courant 'C' dans la fenetre. */ \
DEFV(hyper_hyper_complexe,suite_point); \
/* Suite des points hyper-hyper-complexes O lors de l'iteration. */ \
/* n */ \
DEFV(hyper_hyper_complexe,point_manoeuvre); \
/* Point hyper-hyper-complexe de maneuvre lors de l'iteration. */ \
VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;
#define INITIALISATION_DU_POINT_COURANT_DANS_HHC \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
Bblock \
DEFV(hyper_hyper_complexe,point_courant_avant_rotation); \
/* Point de manoeuvre... */ \
\
HHCinitialisation(point_courant_avant_rotation \
,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y) \
,composante_J,composante_K \
,composante_S,composante_T,composante_U,composante_V \
); \
/* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image auquel */ \
/* on "adjoint" les 'composante_J', 'composante_K', 'composante_S', 'composante_T', */ \
/* 'composante_U' et 'composante_V' pour passer dans l'hyper-hyper-espace. */ \
ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_courant,point_courant_avant_rotation); \
/* Rotation (eventuelle) du point courant... */ \
Eblock \
/* Initialisation du point hyper-hyper-complexe courant sur un maillage {X,Y}. */
#define TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_hyper_hyper_complexe,epsilon) \
Bblock \
EGAL(HHReelle(suite_hyper_hyper_complexe),TROP_PETIT(HHReelle(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHImaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHImaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHJmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHJmaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHKmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHKmaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHSmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHSmaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHTmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHTmaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHUmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHUmaginaire(suite_hyper_hyper_complexe),epsilon)); \
EGAL(HHVmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHVmaginaire(suite_hyper_hyper_complexe),epsilon)); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des underflows d'une suite hyper-hyper-complexe... */
#define TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_hyper_hyper_complexe,anti_epsilon) \
Bblock \
EGAL(HHReelle(suite_hyper_hyper_complexe),TROP_GRAND(HHReelle(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHImaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHImaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHJmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHJmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHKmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHKmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHSmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHSmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHTmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHTmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHUmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHUmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
EGAL(HHVmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHVmaginaire(suite_hyper_hyper_complexe),anti_epsilon)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants... */ \
Eblock \
/* Test des overflows d'une suite hyper-hyper-complexe... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point,FAUX)));
DEFV(Common,DEFV(Positive,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__nombre_repetitions,UN)));
/* Afin de permettre, par exemple, la generation d'objet de type "MandelBox". */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__R,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__R,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__R,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__R,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__R,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__R,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__R,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__I,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__I,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__I,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__I,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__I,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__I,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__I,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__J,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__J,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__J,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__J,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__J,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__J,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__J,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__K,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__K,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__K,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__K,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__K,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__K,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__K,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__S,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__S,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__S,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__S,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__S,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__S,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__S,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__S,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__S,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__T,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__T,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__T,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__T,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__T,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__T,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__T,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__T,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__T,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__U,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__U,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__U,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__U,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__U,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__U,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__U,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__U,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__U,UN)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__V,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__V,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__V,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__V,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__V,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__V,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__V,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__V,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__V,UN)));
#define REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
CON02(IFLT(valeur_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante \
) \
,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn`nom_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante \
) \
) \
,valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn`nom_de_la_composante) \
) \
,IFGT(valeur_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante \
) \
,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp`nom_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante \
) \
) \
,valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp`nom_de_la_composante) \
) \
,NEUT(valeur_de_la_composante) \
) \
/* Repliement d'une composante {R,I,J,K,S,T,U,V} suivant (avec un "Signe" positif) : */ \
/* */ \
/* ^ */ \
/* | */ \
/* \ | */ \
/* \ | */ \
/* \ yp*. . .* */ \
/* \ | /.\ */ \
/* \ | / . \ */ \
/* \ | / . \ */ \
/* \ | / . \ */ \
/* \ xn |/ . \ 2.xp */ \
/* --------*-----*-----O-----*-----*--------------------> */ \
/* 2.xn \ . /| xp \ */ \
/* \ . / | \ */ \
/* \ . / | \ */ \
/* \ . / | \ */ \
/* \./ | \ */ \
/* *. . .*yn \ */ \
/* | \ */ \
/* | \ */ \
/* */ \
/* (avec "n" pour "Negatif" et "p" pour "Positif"), le "Signe" negatif permettant de faire */ \
/* une symetrie par rapport a l'axe des abscisses... */
#define REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
MUL2(NEGA(valeur_de_la_composante) \
,EXPn(MUL2(SOUS(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante) \
) \
,SOUS(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante) \
) \
) \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E`nom_de_la_composante \
) \
) \
/* Repliement d'une composante {R,I,J,K,S,T,U,V} a l'aide d'un polynome (de degre impair de */ \
/* preference si l'on souhaite "simuler" le "zig-zag" affine par morceaux...) dont les */ \
/* intersections avec les axes sont donnees par les racines {2.xn,0,2.xp}. */
#define REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
SINX(SCAL(valeur_de_la_composante \
,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante) \
,PI \
) \
) \
/* Repliement d'une composante {R,I,J,K,S,T,U,V} a l'aide d'une sinusoide dont les */ \
/* intersections avec les axes sont donnees par les racines {2.xp+k.pi}. */
#define REPLIEMENT_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
MUL2(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S`nom_de_la_composante \
,CON03(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire`nom_de_la_composante) \
,REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial`nom_de_la_composante) \
,REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal`nom_de_la_composante) \
,REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
,valeur_de_la_composante \
) \
) \
/* Repliement d'une composante {R,I,J,K,S,T,U,V}. */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__R,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__R,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__I,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__I,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__J,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__J,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__K,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__K,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__S,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__S,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__T,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__T,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__U,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__U,PARAMETRE_D_INVERSION_Rs2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__V,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__V,PARAMETRE_D_INVERSION_Rs2)));
#define INVERSION_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante,carre_du_module) \
CON02(IFLE(carre_du_module \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
) \
,DIVZ(valeur_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
) \
,IFINof(carre_du_module \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2`nom_de_la_composante \
) \
,DIVZ(valeur_de_la_composante \
,carre_du_module \
) \
,valeur_de_la_composante \
) \
/* Inversion d'une composante {R,I,J,K,S,T,U,V} grace a un rayon "Inferieur" et a un rayon */ \
/* "Superieur". Au dessus du rayon "Superieur", la valeur de la composante est conservee. */ \
/* Entre le rayon "Inferieur" et le rayon "Superieur", la composante subit une inversion */ \
/* par rapport a l'hyper-hyper-sphere unite. Enfin, en dessous du rayon "Inferieur", la */ \
/* composante subit une inversion "etrange"... */
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire,VRAI)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__R,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__R,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__I,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__I,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__J,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__J,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__K,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__K,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__S,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__S,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__T,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__T,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__U,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__U,FZERO)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__V,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__V,FZERO)));
#define TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante) \
AXPB(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A`nom_de_la_composante \
,valeur_de_la_composante \
,gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B`nom_de_la_composante \
) \
/* Transformation lineaire d'une composante {R,I,J,K,S,T,U,V}. */
#define gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES \
Bblock \
BLOC(VIDE;); \
Eblock \
/* Introduit le 20210206174951... */
#define gF_ITERATION_DANS_HHC(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
INITIALISATION_TRANSFORMATION; \
/* Au cas ou une rotation tridimensionnelle serait demandee... */ \
\
BLOC(initialisation_point_courant); \
/* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image. */ \
\
BLOC(init_iteration); \
/* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point_courant", */ \
/* soit : */ \
/* */ \
/* O = 0 */ \
/* 0 */ \
/* */ \
/* ou : */ \
/* */ \
/* O = C */ \
/* 0 */ \
/* */ \
/* et, initialisation du compteur des iterations. */ \
\
Tant(IFET(test_d_arret \
,PAS_ASSEZ_D_ITERATIONS \
) \
) \
Bblock \
Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point)) \
Bblock \
Repe(gF_ITERATION_DANS_HHC_____transformer__suite_point__nombre_repetitions) \
Bblock \
Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement)) \
Bblock \
DEFV(hyper_hyper_complexe,suite_point_manoeuvre); \
\
HHCinitialisation(suite_point_manoeuvre \
,REPLIEMENT_D_UNE_COMPOSANTE(_R,HHReelle(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point)) \
,REPLIEMENT_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point)) \
); \
/* On notera que les composantes s'appellent {_R,_I,_J,_K,_S,_T,_U,_V}, alors qu'il aurait */ \
/* ete evidemment plus logique de les appeler {R,I,J,K,S,T,U,V}. Le probleme vient du fait */ \
/* que le symbole 'I' est defini ('v $xil/defi_K1$vv$DEF .define...I.') et ne peut donc */ \
/* etre utilise ici... */ \
HHCegal(suite_point,suite_point_manoeuvre); \
/* Repliement de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion)) \
Bblock \
DEFV(Float,INIT(module2__suite_point,HHCmodule2(suite_point))); \
DEFV(hyper_hyper_complexe,suite_point_manoeuvre); \
\
HHCinitialisation(suite_point_manoeuvre \
,INVERSION_D_UNE_COMPOSANTE(_R,HHReelle(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point),module2__suite_point) \
,INVERSION_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point),module2__suite_point) \
); \
HHCegal(suite_point,suite_point_manoeuvre); \
/* Inversion de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion)) \
Bblock \
DEFV(hyper_hyper_complexe,suite_point_manoeuvre); \
\
HHCinitialisation(suite_point_manoeuvre \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_R,HHReelle(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point)) \
,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point)) \
); \
HHCegal(suite_point,suite_point_manoeuvre); \
/* Transformation lineaire de 'suite_point'... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ERep \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
BLOC(calculs_communs); \
\
INCR(nombre_courant_d_iterations,I); \
\
BLOC(fonc_iteration); \
/* Puis : */ \
/* */ \
/* 2 */ \
/* O + C */ \
/* n */ \
/* */ \
/* ou : */ \
/* */ \
/* 2 */ \
/* O + A */ \
/* n */ \
/* */ \
\
Test(IL_FAUT(gF_ITERATION_DANS_HHC_____replier_l_espace)) \
Bblock \
DEFV(hyper_hyper_complexe,suite_point_manoeuvre); \
\
aHHCmodulo(suite_point_manoeuvre \
,suite_point \
,gF_ITERATION_DANS_HHC_____Rorigine__ \
,gF_ITERATION_DANS_HHC_____Rextremite \
,gF_ITERATION_DANS_HHC_____Iorigine__ \
,gF_ITERATION_DANS_HHC_____Iextremite \
,gF_ITERATION_DANS_HHC_____Jorigine__ \
,gF_ITERATION_DANS_HHC_____Jextremite \
,gF_ITERATION_DANS_HHC_____Korigine__ \
,gF_ITERATION_DANS_HHC_____Kextremite \
,gF_ITERATION_DANS_HHC_____Sorigine__ \
,gF_ITERATION_DANS_HHC_____Sextremite \
,gF_ITERATION_DANS_HHC_____Torigine__ \
,gF_ITERATION_DANS_HHC_____Textremite \
,gF_ITERATION_DANS_HHC_____Uorigine__ \
,gF_ITERATION_DANS_HHC_____Uextremite \
,gF_ITERATION_DANS_HHC_____Vorigine__ \
,gF_ITERATION_DANS_HHC_____Vextremite \
); \
/* Repliement eventuel de l'espace introduit le 20121103101108... */ \
\
HHCegal(suite_point,suite_point_manoeuvre); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
Eblock \
ETan \
\
Test(IL_FAUT(visualisation_arguments_de_sortie)) \
/* Sequence introduite le 20111001084001... */ \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments)) \
Bblock \
EGAL(niveau_courant_precis \
,LRZ7(ponderation_argumentA1,HHCargumentA1_2PI(suite_point) \
,ponderation_argumentA2,HHCargumentA2_2PI(suite_point) \
,ponderation_argumentA3,HHCargumentA3_2PI(suite_point) \
,ponderation_argumentA4,HHCargumentA4_2PI(suite_point) \
,ponderation_argumentA5,HHCargumentA5_2PI(suite_point) \
,ponderation_argumentA6,HHCargumentA6_2PI(suite_point) \
,ponderation_argumentA7,HHCargumentA7_2PI(suite_point) \
) \
); \
EGAL(niveau_courant \
,GENP(SCAL(niveau_courant_precis \
,CERCLE_TRIGONOMETRIQUE \
,BLANC \
) \
) \
); \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,HHCmodule(suite_point) \
); \
EGAL(niveau_courant \
,GENP(SCAL(TRON(niveau_courant_precis \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments \
,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments \
) \
,BLANC \
) \
) \
); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
Bblock \
EGAL(niveau_courant_precis \
,CASP_Float(nombre_courant_d_iterations) \
); \
EGAL(niveau_courant \
,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations) \
,SCAL(nombre_courant_d_iterations \
,nombre_maximal_d_iterations \
,BLANC \
) \
,nombre_courant_d_iterations \
) \
) \
); \
/* Visualisation du nombre d'iterations... */ \
Eblock \
ATes \
Bblock \
EGAL(niveau_courant_precis \
,COND(PAS_ASSEZ_D_ITERATIONS \
,fNON_APPARTENANCE_A_L_ENSEMBLE \
,fAPPARTENANCE_A_L_ENSEMBLE \
) \
); \
EGAL(niveau_courant \
,COND(PAS_ASSEZ_D_ITERATIONS \
,NON_APPARTENANCE_A_L_ENSEMBLE \
,APPARTENANCE_A_L_ENSEMBLE \
) \
); \
/* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC'). */ \
Eblock \
ETes \
Eblock \
ETes \
/* Calcul du niveau du point. */ \
\
RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
/* Et enfin, marquage du point courant. */ \
\
BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
Eblock
DEFV(Common,DEFV(Logical,ZINT(F_ITERATION_DANS_HHC_____compatibilite_20110825,FAUX)));
/* Introduit le 20110825111448 car, en effet pour le calcul du carre, les methodes */
/* 'HHCproduit(...)' et 'HHCpuissance(...)' ne donnent evidemment le meme resultat que */
/* si le produit theorique est utilise. Dans le cas contraire, on a : */
/* */
/* 2 */
/* o # 1.o.o */
/* */
/* ce que j'avais neglige dans un premier temps. Voici un petit exemple obtenu lors du */
/* calcul du deuxieme point de 'v $xiirc/MANE.D1.2' avec '$xrc/mandel.81$x' et les */
/* parametres suivants : */
/* */
/* J=0.8 */
/* K=0 */
/* xbg=-0.04403889 xhd=-0.03475372 */
/* ybg=-0.36672577 yhd=-0.35744060 */
/* */
/* Soit donc l'octonion 'o1' dont on veut calculer le carre ('o') : */
/* */
/* o1 = (-0.045705,-0.366726,+0.800000,0,0,0,0,0) */
/* */
/* Dans le cas "produit_theorique=VRAI", on a : */
/* */
/* avec 'HHCproduit(...)' : */
/* */
/* o = (-0.772399,+0.033522,-0.073128,0,0,0,0,0) ==== */
/* | */
/* avec 'HHCpuissance(...)' : | */
/* | */
/* o_cumul_multiplicatif = (+1.000000, 0.000000, 0.000000,0,0,0,0,0) | */
/* o_cumul_multiplicatif = (-0.045705,-0.366726,+0.800000,0,0,0,0,0) | */
/* o_cumul_multiplicatif = (-0.772399,+0.033522,-0.073128,0,0,0,0,0) | */
/* o = (-0.772399,+0.033522,-0.073128,0,0,0,0,0) ==== */
/* */
/* ce qui donne bien le meme resultat ("=") 'o' pour le carre... */
/* */
/* Dans le cas "produit_non_theorique=VRAI", on a : */
/* */
/* avec 'HHCproduit(...)' : */
/* */
/* o = (-0.042562,-0.097115,-0.079080,0,0,0,0,0) #### */
/* | */
/* avec 'HHCpuissance(...)' : | */
/* | */
/* o_cumul_multiplicatif = (+1.000000, 0.000000, 0.000000,0,0,0,0,0) | */
/* o_cumul_multiplicatif = (-0.188844,+0.288948,+0.114547,0,0,0,0,0) | */
/* o_cumul_multiplicatif = (-0.000061,-0.000033,-0.000087,0,0,0,0,0) | */
/* o = (-0.000061,-0.000033,-0.000087,0,0,0,0,0) #### */
/* */
/* ce qui donne deux valeurs differentes ("#") 'o' pour le carre... */
#define F_ITERATION_DANS_HHC(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration) \
/* Sequence de calcul de la valeur a donner au point courant {X,Y}. */ \
/* */ \
/* Le parametre 'exposant' a ete introduit le 20110824071959... */ \
/* */ \
/* L'argument 'fin_iteration' a ete introduit le 20150225152454... */ \
Bblock \
Test(IFET(IL_FAUT(F_ITERATION_DANS_HHC_____compatibilite_20110825),IFNE(exposant,FDEUX))) \
/* Le parametre 'exposant' est passe de 'Int' a 'Float' le 20110829152111... */ \
Bblock \
PRINT_ATTENTION("la compatibilite 20110825 des iterations hyper-hyper-complexes impose le second degre"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
gF_ITERATION_DANS_HHC(test_d_arret \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_HHC; \
Eblock \
) \
,BLOC(init_iteration); \
,BLOC(Bblock \
Test(IL_NE_FAUT_PAS(F_ITERATION_DANS_HHC_____compatibilite_20110825)) \
Bblock \
aHHCpuissance(point_manoeuvre,suite_point,exposant); \
/* Calculons : */ \
/* */ \
/* 2 */ \
/* O */ \
/* n */ \
/* */ \
/* a priori (mais cela peut etre inutile dans certains cas...). */ \
/* */ \
/* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui */ \
/* heureusement ici n'a pas d'importance puisque le produit ici calcule est un carre... */ \
/* */ \
/* Le 20110824071959 : */ \
/* */ \
/* HHCproduit(point_manoeuvre,suite_point,suite_point); */ \
/* */ \
/* a ete remplace par : */ \
/* */ \
/* HHCpuissance(point_manoeuvre,suite_point,exposant); */ \
/* */ \
/* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite */ \
/* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les */ \
/* calculs), en fait 'DEUX' sera utilise... */ \
/* */ \
/* On lira avec interet le commentaire 'v $ximcf/iterations$FON 20110826090921' qui porte */ \
/* sur les quaternions et s'applique evidemment aux octonions. Il dit en substance que */ \
/* generer une fractale pour laquelle les composantes {J,K,S,T,U,V} sont nulles sauf l'une */ \
/* d'entre-elles (par exemple 'J') donnera le meme resultat si l'on donne la valeur de 'J' */ \
/* a une autre composante (par exemple 'T') en annulant 'J' evidemment... */ \
Eblock \
ATes \
Bblock \
aHHCproduit(point_manoeuvre,suite_point,suite_point); \
/* Possibilite introduite le 20110825111448... */ \
Eblock \
ETes \
Eblock \
) \
,BLOC(fonc_iteration); \
,BLOC(fin_iteration); \
/* Cette possibilite a ete introduite le 20150225152454... */ \
); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D ' U N E S U I T E Q U E L C O N Q U E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#define BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC \
/* Definition des variables communes a toutes les fonctions calculant une suite quelconque */ \
/* dans l'espace Hyper-Complexe. */ \
BVARIABLES_D_HOMOTHETIE_C_HC_HHC \
/* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images. */ \
DEFV(hyper_hyper_complexe,point_courant); \
/* Point hyper-complexe courant 'C' dans la fenetre. */
#define F_ITERATION_QUELCONQUE_DANS_HHC(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut) \
Bblock \
DEFV(Int,INIT(numero_de_l_iteration,UNDEF)); \
/* Indice 'n' de la suite 'X'... */ \
DEFV(hyper_hyper_complexe,element_courant_de_la_suite_Pn); \
/* Element courant Z de la suite. */ \
/* n */ \
BLOC(initialisation); \
/* Initialisation de la suite definissant le systeme dynamique... */ \
\
DoIn(numero_de_l_iteration \
,premiere_iteration_effective \
,LSTX(premiere_iteration_absolue,nombre_d_iterations) \
,I \
) \
Bblock \
BLOC(iteration); \
/* Calcul du systeme dynamique par iteration du calcul de la suite... */ \
\
Test(IL_FAUT(test_defaut)) \
Bblock \
TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(element_courant_de_la_suite_Pn \
,iterations_dans_C_HC_HHC_____epsilon \
); \
/* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter */ \
/* des underflows flottants... */ \
TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI)); \
/* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows */ \
/* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au */ \
/* carre lors de l'eventuelle iteration suivante... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock \
EDoI \
\
storeHJ_point(element_courant_de_la_suite_Pn \
,imageR \
,X,Y \
); \
/* Generation de l'image "hyper_hyper_complexe"... */ \
Eblock \
/* Calcul general d'une suite quelconque dans l'espace hyper-complexe... */
/*===================================================================================================================================*/
/* :Debut_listMN_MANDELBROT_OCTONION_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E M A N D E L B R O T D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* O = 0 */
/* 0 */
/* */
/* 2 */
/* O = O + C */
/* n+1 n */
/* */
/* (ou 'C' designe le point courant). */
/* */
/* Si |O | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Mandelbrot. */
/* */
/* */
/* Forme generale d'une section tridimensionnelle : */
/* */
/* */
/* : */
/* ++--:: */
/* +++----:::.. */
/* +++++--::... */
/* oooo+o+----::.. */
/* * ooooo++++--::.. */
/* ----:***oooooo++------. --: */
/* ++++++-o*****ooo++++++----+---: */
/* ++o+++o*****ooo+++++++++o+++-::: */
/* ooooo+o********oooooo++o+o++-::::. */
/* +-- -- ooooooo**#***#**oooooooooooo+-----. */
/* ++++--++---- ooooooo######***ooooooooooo++++--:. */
/* o+++++++++++++-o**ooo***####*****o**oooo*oo+++---:: */
/* - o+++++o++++++o*****o**#####********oo*o*oooo+---:: */
/* +ooo+++oo++++++o*******########************ooo+---:: */
/* - +-oooooo+ooooo+++********#########***********ooo----:: */
/* +ooooooooooooo++*******#########************ooo+---: */
/* oooooooooooo+++*******#########************ooo+---: */
/* oooo++oo++++++*******#########************ooo++--: */
/* o+++++o++++- o******#########************ooo+--- */
/* o+++ + o*******########************o++++-: */
/* *******#########*****oo*o**o+---- */
/* ***ooo*########******oooo*oo++--- */
/* oooooo*#*###***ooooooo+o*ooo++ */
/* o+o++*#####****oo++o++. o++ */
/* *#####****o++-- */
/* ####*##oooo++- */
/* #****oo+--- */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_MANDELBROT_OCTONION_11: */
BFonctionP
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
/* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite */
/* dans ce cas particulier... */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HHC_____exposant,FDEUX)));
/* Introduit le 20110824071959... */
/* */
/* Le 20110829143849 l'exposant est passe de 'Int' a 'Float'... */
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HHC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Imandelbrot_dans_HHC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HHC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Imandelbrot_dans_HHC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_HHC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,composante_S
,composante_T
,composante_U
,composante_V
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentA1
,ponderation_argumentA2
,ponderation_argumentA3
,ponderation_argumentA4
,ponderation_argumentA5
,ponderation_argumentA6
,ponderation_argumentA7
)
)
)
)
/* Fonction introduite le 20110802111915... */
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-hyper-complexe' dans lequel seront definies les */
/* composantes 'HHReelle' et 'HHImaginaire'. Les Arguments 'composante_?' definissent */
/* 'HH?maginaire' (ou '?' represente {J,K,S,T,U,V}). */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} de */
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}. */
/* Cette possibilite fut introduite le 20111001084001... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HHC
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision. */
begin_image
Bblock
F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Imandelbrot_dans_HHC_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_HHC_____charger_____l_etat_initial))
Bblock
HHCegal(suite_point,loadHHJ_point(Imandelbrot_dans_HHC_____etat_initial,X,Y));
Eblock
ATes
Bblock
HHCegal(suite_point,HHC_____octonion__0__0__0__0__0__0__0__0);
/* Initialisation de la suite des nombres hyper-hyper-complexes sur l'origine, soit : */
/* */
/* O = 0 */
/* 0 */
/* */
/* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
/* entre Julia et Mandelbrot ne serait plus evidente... */
Eblock
ETes
CLIR(nombre_courant_d_iterations);
/* Initialisation du compteur des iterations. */
Eblock
)
,BLOC(Bblock
aHHCsomme(suite_point,point_manoeuvre,point_courant);
/* Puis : */
/* */
/* 2 */
/* O + C */
/* n */
/* */
/* ou 'C' designe le point hyper-hyper-complexe Courant. */
Eblock
)
,Imandelbrot_dans_HHC_____exposant
,BLOC(Bblock
Test(IL_FAUT(Imandelbrot_dans_HHC_____sauvegarder_l_etat_final__))
Bblock
storeHHJ_point(suite_point,Imandelbrot_dans_HHC_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/* :Debut_listMN_JULIA_OCTONION_11: */
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E J U L I A D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* O = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* 2 */
/* O = O + A */
/* n+1 n */
/* */
/* (ou 'A' designe un nombre hyper-hyper-complexe */
/* Argument arbitraire). */
/* */
/* Si |O | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Julia */
/* calcule pour le nombre hyper-hyper-complexe 'A'. */
/* */
/* */
/* Forme generale d'une section tridimensionnelle : */
/* */
/* */
/* . ..... */
/* .. .. ---:::: */
/* ......... ..++---- */
/* .......:... :-o++++++ */
/* :.....::---:.. +oooo++++ */
/* ::::::::-+++-::.:::oooooooo+ */
/* :::::::::++++------oooooooo.. */
/* +::::::..+ooo+++++o****oooo.. */
/* ++ ::...ooooo++++*********... */
/* +o +oooo***ooo********............ */
/* +oo +oooooo************............ */
/* +oooooooooooo*########*:::......::. */
/* oooooooooooo#########:::::::::::: */
/* +ooooooo+++#########:::::::::::-: */
/* oooooo++++#######-:::::::::---- */
/* ooo+++++--#####---::::-------- */
/* +++++++--#####--------------+++ */
/* ++++++---#####-------------+++- */
/* +++----####--::--------+++++- */
/* ------###:::::::-----++++++++ */
/* --:####:::::::----++++ooo++ */
/* ::####....:::-+++++ooooo++ */
/* ###### :-+++++ooooooo+ */
/* ####### --+ooo++ooooooo++.. */
/* ######## **oooooooooooooooo+..: */
/* #########oooooooooooo+ooooo+.:::::: */
/* #########**ooooooooooo+:::oo+:::::::: */
/* ***************oooooo+--:::::++::::::. */
/* *********+++-oooooo+++--:::::.+++--:.. */
/* *ooo****o+++--:.o+++++---:::...+---:.. */
/* ooooooooo++- --:.. */
/* +++oooo+. :. */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_JULIA_OCTONION_11: */
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____faire_la_rotation_de__nombre_argument,VRAI)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
/* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite */
/* dans ce cas particulier... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____exposant,FDEUX)));
/* Introduit le 20110824071959... */
/* */
/* Le 20110829143849 l'exposant est passe de 'Int' a 'Float'... */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____ponderation__point_courant_C,FZERO)));
/* Introduit le 20130825092858... */
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Ijulia_dans_HHC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Ijulia_dans_HHC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
/* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete */
/* introduit le 20150227205446... */
DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_HHC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,composante_S
,composante_T
,composante_U
,composante_V
,ARGUMENT_POINTERs(nombre_argument)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentA1
,ponderation_argumentA2
,ponderation_argumentA3
,ponderation_argumentA4
,ponderation_argumentA5
,ponderation_argumentA6
,ponderation_argumentA7
)
)
)
)
/* Fonction introduite le 20110802111915... */
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-hyper-complexe' dans lequel seront definies les */
/* composantes 'HHReelle' et 'HHImaginaire'. Les Arguments 'composante_?' definissent */
/* 'HH?maginaire' (ou '?' represente {J,K,S,T,U,V}). */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(nombre_argument)));
/* Nombre hyper-hyper-complexe "generateur" de l'ensemble de Julia que l'on veut calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} de */
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}. */
/* Cette possibilite fut introduite le 20111001084001... */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HHC
DEFV(hyper_hyper_complexe,point_argument);
/* Point hyper-hyper-complexe argument. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision. */
Test(IL_FAUT(Ijulia_dans_HHC_____faire_la_rotation_de__nombre_argument))
Bblock
ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_argument,INDIRECT(nombre_argument));
/* Recuperation du nombre hyper-hyper-complexe "generateur", avec rotation eventuelle. */
Eblock
ATes
Bblock
HHCegal(point_argument,INDIRECT(nombre_argument));
/* Cas ou la rotation de 'nombre_argument' est inhibee... */
Eblock
ETes
begin_image
Bblock
F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Ijulia_dans_HHC_____seuil_du_carre_du_module)
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_HHC_____charger_____l_etat_initial))
Bblock
HHCegal(suite_point,loadHHJ_point(Ijulia_dans_HHC_____etat_initial,X,Y));
Eblock
ATes
Bblock
HHCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* O = C */
/* 0 */
/* */
Eblock
ETes
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
DEFV(hyper_hyper_complexe,point_manoeuvre_1);
aHHCcombinaison_lineaire_2(point_manoeuvre_1
,Ijulia_dans_HHC_____ponderation_point_argument_A,point_argument
,Ijulia_dans_HHC_____ponderation__point_courant_C,point_courant
);
aHHCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
/* Puis : */
/* */
/* 2 */
/* O + A */
/* n */
/* */
/* ou 'A' designe le point hyper-hyper-complexe Argument. */
/* */
/* Ou plus generalement (introduit le 20130825092858) : */
/* */
/* 2 */
/* O + p .A + p .C */
/* n A C */
/* */
/* avec pA=1 et pC=0 par defaut... */
Eblock
)
,Ijulia_dans_HHC_____exposant
,BLOC(Bblock
Test(IL_FAUT(Ijulia_dans_HHC_____sauvegarder_l_etat_final__))
Bblock
storeHHJ_point(suite_point,Ijulia_dans_HHC_____etat_final__,X,Y);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L ' E N S E M B L E D E V E R H U L S T D A N S U N E F E N E T R E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* O = C */
/* 0 */
/* */
/* (ou 'C' designe le point courant), */
/* */
/* O = R.O .(1 - O ) */
/* n+1 n n */
/* */
/* (ou 'R' designe un nombre reel Argument */
/* arbitraire appele "taux de croissance"). */
/* */
/* Si |O | tend vers l'infini, 'C' */
/* n */
/* n'appartient pas a l'ensemble de Verhulst */
/* calcule pour le nombre reel 'R'. */
/* */
/* */
/* Forme generale : */
/* */
/* */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* .........................#.###########.#........................ */
/* ........................#################....................... */
/* ............####.......###################.......####........... */
/* .........##########...#####################...##########........ */
/* ....###..###########..#####################..###########..###... */
/* ################################################################ */
/* ....###..###########..#####################..###########..###... */
/* .........##########...#####################...##########........ */
/* ............####.......###################.......####........... */
/* ........................#################....................... */
/* .........................#.###########.#........................ */
/* ................................#............................... */
/* ...............................###.............................. */
/* ................................#............................... */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* ................................................................ */
/* */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_HHC_____utiliser_la_forme_la_plus_simple,VRAI)));
/* Faut-il utiliser la forme ('VRAI') : */
/* */
/* O = R.O .(1 - O ) */
/* n+1 n n */
/* */
/* ou bien la forme ('FAUX') : */
/* */
/* 2 */
/* O = (R+1).O - R.O */
/* n+1 n n */
/* */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
/* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite */
/* dans le cas particulier du calcul de l'ensemble de Verhulst. */
DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_HHC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,composante_S
,composante_T
,composante_U
,composante_V
,ARGUMENT_POINTERs(taux_de_croissance)
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentA1
,ponderation_argumentA2
,ponderation_argumentA3
,ponderation_argumentA4
,ponderation_argumentA5
,ponderation_argumentA6
,ponderation_argumentA7
)
)
)
)
/* Fonction introduite le 20111129105411... */
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-hyper-complexe'. */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(taux_de_croissance)));
/* Taux de croissance hyper-hyper-complexe 'R' de l'ensemble de Verhulst que l'on veut */
/* calculer. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} */
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HHC
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision. */
begin_image
Bblock
F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Iverhulst_dans_HHC_____seuil_du_carre_du_module)
,BLOC(Bblock
HHCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* O = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IL_FAUT(Iverhulst_dans_HHC_____utiliser_la_forme_la_plus_simple))
Bblock
DEFV(hyper_hyper_complexe,point_manoeuvre_1);
DEFV(hyper_hyper_complexe,point_manoeuvre_2);
/* Points hyper-hyper-complexes de maneuvre lors de l'iteration. */
aHHCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
/* Calcul de : */
/* */
/* 1 - O = -O + 1 */
/* n n */
/* */
aHHCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
/* Calcul de : */
/* */
/* O .(1 - O ) */
/* n n */
/* */
/* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui */
/* signifie que : */
/* */
/* O .(1 - O ) # (1 - O ).O */
/* n n n n */
/* */
aHHCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
/* Calcul de : */
/* */
/* O = R.O .(1 - O ) */
/* n+1 n n */
/* */
/* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui */
/* signifie que : */
/* */
/* R.O # O.R */
/* */
Eblock
ATes
Bblock
DEFV(hyper_hyper_complexe,point_manoeuvre_1);
DEFV(hyper_hyper_complexe,point_manoeuvre_2);
DEFV(hyper_hyper_complexe,point_manoeuvre_3);
DEFV(hyper_hyper_complexe,point_manoeuvre_4);
/* Points hyper-hyper-complexes de maneuvre lors de l'iteration. */
aHHCproduit(point_manoeuvre_1,suite_point,suite_point);
/* Calcul de : */
/* */
/* 2 */
/* O */
/* n */
/* */
aHHCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
/* Calcul de : */
/* */
/* 2 */
/* R.O */
/* n */
/* */
aHHCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
/* Calcul de : */
/* */
/* R+1 */
/* */
aHHCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
/* Calcul de : */
/* */
/* (R+1).O */
/* n */
/* */
aHHCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
/* Calcul de : */
/* */
/* 2 */
/* O = (R+1).O - R.O */
/* n+1 n n */
/* */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'HHCpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E S R A C I N E S N - I E M E S D E L ' U N I T E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_HHC_____seuil_du_carre_du_module,F_INFINI)));
/* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite */
/* dans le cas particulier de la recherche des racines n_iemes de l'unite... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_HHC(imageR
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,composante_S
,composante_T
,composante_U
,composante_V
,exposant
,nombre_maximal_d_iterations
,visualisation_arguments_de_sortie
,ponderation_argumentA1
,ponderation_argumentA2
,ponderation_argumentA3
,ponderation_argumentA4
,ponderation_argumentA5
,ponderation_argumentA6
,ponderation_argumentA7
)
)
)
)
/* Fonction introduite le 20111129105411... */
DEFV(Argument,DEFV(image,imageR));
/* Image resultat a generer. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-hyper-complexe'. */
DEFV(Argument,DEFV(Positive,exposant));
/* Exposant 'N'. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} */
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HHC
DEFV(hyper_hyper_complexe,exposant_octonionique_moins_1);
/* Exposant complexe moins 1. */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision. */
begin_image
Bblock
F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Iracines_n_iemes_de_l_unite_dans_HHC_____seuil_du_carre_du_module)
,BLOC(Bblock
HHCinitialisation(exposant_octonionique_moins_1
,FLOT(PRED(exposant)),I0_Octonion,J0_Octonion,K0_Octonion
,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion
);
/* Conversion complexe de l'exposant moins 1. */
HHCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', */
/* soit : */
/* */
/* O = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(Bblock
Test(IZNE(HHCmodule2(suite_point)))
Bblock
DEFV(hyper_hyper_complexe,point_manoeuvre_1);
DEFV(hyper_hyper_complexe,point_manoeuvre_3);
DEFV(hyper_hyper_complexe,point_manoeuvre_4);
DEFV(hyper_hyper_complexe,point_manoeuvre_5);
DEFV(hyper_hyper_complexe,point_manoeuvre_6);
DEFV(hyper_hyper_complexe,point_manoeuvre_7);
/* Points complexes de maneuvre lors de l'iteration. */
aHHCexponentielle_octonionique(point_manoeuvre_6,suite_point,exposant_octonionique_moins_1);
/* Calcul de : */
/* */
/* N-1 */
/* O */
/* n */
/* */
aHHCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
/* Calcul de : */
/* */
/* N */
/* O */
/* n */
/* */
aHHCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
/* Calcul de : */
/* */
/* N-1 */
/* N.O */
/* n */
/* */
aHHCdifference(point_manoeuvre_3,point_manoeuvre_7,HHC_____octonion_p1__0__0__0__0__0__0__0);
/* Puis de : */
/* */
/* N */
/* O - 1 */
/* n */
/* */
aHHCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
/* Puis de : */
/* */
/* N */
/* O - 1 */
/* n */
/* --------- */
/* N-1 */
/* N.O */
/* n */
/* */
aHHCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
HHCegal(suite_point,point_manoeuvre_5);
/* Puis de : */
/* */
/* N */
/* O - 1 */
/* n */
/* O = O - -------- */
/* n+1 n N-1 */
/* N.O */
/* n */
/* */
Eblock
ATes
Bblock
/* L'origine (0,0) est un point particulier... */
Eblock
ETes
Eblock
)
,EXPOSANT_INUTILE
/* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que */
/* calcul de 'point_manoeuvre' via 'HHCpuissance(...)'. */
/* */
/* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'... */
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D ' U N P O L Y N O M E V A R I A B L E Q U E L C O N Q U E */
/* D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/* */
/* Definition : */
/* */
/* Soit la suite : */
/* */
/* O = C */
/* 0 */
/* */
/* O = polynome(O ) */
/* n+1 n */
/* */
/* (ou 'C' designe le point Courant). */
/* */
/* La fonction 'polynome(...)' est definie */
/* par (la translation 't' de l'exposant pouvant */
/* etre negative a compter du 20100316172716) : */
/* */
/* 0+t 1+t p+t */
/* polynome(O) = A .O + A .O + ... + A .O + alpha.A + beta.C */
/* 0 1 p */
/* */
/* (ou 'A' et 'C' designent respectivement un */
/* nombre complexe arbitraire Argument et le */
/* point Courant). Quant a la suite de coefficients */
/* {A0,A1,...,Ap} elle est definie a partir d'un album */
/* d'images (indexe par 'Z' -majuscule-). */
/* */
/* Mais ATTENTION, si cela permet de faire varier */
/* localement le polynome au point {X,Y} on notera */
/* bien que : */
/* */
/* C # X + i.Y + ... */
/* */
/* a priori (les coordonnees {X,Y} sont relatives */
/* a une image, alors que 'C' est dans l'espace */
/* hyper-complexe. Cela signifie que lors d'un changement */
/* de la fenetre de calcul {coin_bas_gauche,coin_haut_droite} */
/* (par zoom et/ou translation), les coefficients {A0,A1,...,Ap} */
/* du polynome, eux, resteront les memes... */
/* */
/* Enfin, on notera deux choix importants possibles : */
/* */
/* {alpha=1,beta=0} : ensemble de type "Julia", */
/* {alpha=0,beta=1} : ensemble de type "Mandelbrot", */
/* */
/* toutes les autres combinaisons etant evidemment */
/* possibles... */
/* */
/* Le 20100210133645 a ete introduite la possibilite de */
/* parametrer localement en {X,Y} et partiellement le produit */
/* non theorique (s'il est active) par {exposa1_Rho,ponder1_A1_,ponder1_A2_,...,ponder1_A7_}. */
/* */
/* */
/* Nota important : */
/* */
/* La definition du polynome, comme la definition */
/* du parametrage du produit non theorique, n'ont */
/* reellement de sens que lorsqu'un seule 'imageR' */
/* est calculee puisque dans le cas contraire, ce */
/* sont les memes definitions qui seront utilisees */
/* pour d'autres images. Pour bien faire, il conviendrait */
/* de les rendre "multidimensionnelles"... */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____faire_la_rotation_de__nombre_argument_A,VRAI)));
/* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation */
/* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires... */
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A1_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A2_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A3_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A4_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A5_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A6_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A7_,VRAI)));
/* Introduit le 20100221090225 a cause de 'v $ximcd/operator$FON 20100210182653'... */
DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____premier_exposant_du_polynome,ZERO)));
/* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances */
/* negatives de 'Z'... */
DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_HHC(imageR
,definition_du_polynome
,definition_de_exposa1_Rho
,definition_de_ponder1_A1_
,definition_de_ponder1_A2_
,definition_de_ponder1_A3_
,definition_de_ponder1_A4_
,definition_de_ponder1_A5_
,definition_de_ponder1_A6_
,definition_de_ponder1_A7_
,ponderation_du_nombre_argument_A
,ARGUMENT_POINTERs(nombre_argument_A)
,ponderation_du_nombre_courant_C
,ARGUMENT_POINTERs(coin_bas_gauche)
,ARGUMENT_POINTERs(coin_haut_droite)
,composante_J
,composante_K
,composante_S
,composante_T
,composante_U
,composante_V
,nombre_maximal_d_iterations
,seuil_du_carre_du_module
,visualisation_arguments_de_sortie
,ponderation_argumentA1
,ponderation_argumentA2
,ponderation_argumentA3
,ponderation_argumentA4
,ponderation_argumentA5
,ponderation_argumentA6
,ponderation_argumentA7
)
)
)
)
/* Fonction introduite le 20111118211805... */
DEFV(Argument,DEFV(image,imageR));
/* Image Resultat a generer. */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
/* Definition du polynome variable (en {X,Y}) a l'aide d'un album. */
DEFV(Argument,DEFV(imageF,definition_de_exposa1_Rho));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A1_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A2_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A3_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A4_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A5_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A6_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A7_));
/* Definition du parametrage partiel eventuel du "faux" produit. */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_argument_A));
/* Ponderation du nombre complexe argument 'A'. */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(nombre_argument_A)));
/* Nombre hyper-complexe argument 'A'. */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_courant_C));
/* Ponderation du nombre hyper-complexe courant 'C'. */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
/* Definition du point situe en bas et a gauche de la fenetre, */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
/* Definition du point situe en haut et a droite de la fenetre. */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
/* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace */
/* bidimensionnel de l'espace hyper-hyper-complexe'. */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
/* Nombre maximal d'iterations demande. */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
/* Seuil du carre du module definissant l'arret des iterations. */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
/* Cet indicateur logique permet de choisir le type d'information que */
/* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} */
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'), */
/* n */
/* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
BVARIABLES_F_ITERATION_DANS_HHC
DEFV(hyper_hyper_complexe,nombre_argument_A_apres_transformation_eventuelle);
/* Point hyper-complexe argument apres transformation eventuelle... */
/*..............................................................................................................................*/
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
/* Initialisation eventuelle du processus d'extension de la precision. */
Test(IL_FAUT(Iiteration_polynome_variable_quelconque_dans_HHC_____faire_la_rotation_de__nombre_argument_A))
Bblock
ROTATION_TRIDIMENSIONNELLE_DANS_HHC(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
/* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle. */
Eblock
ATes
Bblock
HHCegal(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
/* Cas ou la rotation de 'nombre_argument' est inhibee... */
Eblock
ETes
begin_image
Bblock
#define prendre_la_partie_entiere_de_ponder1_A1_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A1_
#define prendre_la_partie_entiere_de_ponder1_A2_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A2_
#define prendre_la_partie_entiere_de_ponder1_A3_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A3_
#define prendre_la_partie_entiere_de_ponder1_A4_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A4_
#define prendre_la_partie_entiere_de_ponder1_A5_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A5_
#define prendre_la_partie_entiere_de_ponder1_A6_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A6_
#define prendre_la_partie_entiere_de_ponder1_A7_ \
Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A7_
/* Afin de raccourcir des lignes qui suivent... */
gF_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil_du_carre_du_module)
,BLOC(Bblock
INITIALISATION_DU_POINT_COURANT_DANS_HHC;
Eblock
)
/* Introduit le 20091012111043... */
,BLOC(Bblock
HHCegal(suite_point,point_courant);
/* Initialisation de la suite des nombres hyper-complexes avec : */
/* */
/* O = C */
/* 0 */
/* */
EGAL(nombre_courant_d_iterations,UN);
/* Initialisation du compteur des iterations ; ce compteur est initialise */
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */
/* valeur non nulle soit rangee... */
Eblock
)
,BLOC(VIDE;
)
,BLOC(Bblock
DEFV(hyper_hyper_complexe,puissance_courante);
DEFV(hyper_hyper_complexe,polynome_courant);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__exposa1_Rho
,loadF_point(definition_de_exposa1_Rho,X,Y)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle1
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A1_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A1_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle2
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A2_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A2_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle3
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A3_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A3_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle4
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A4_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A4_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle5
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A5_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A5_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle6
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A6_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A6_,X,Y)
)
);
BSaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle7
,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A7_)
,AINT
,NEUT
,loadF_point(definition_de_ponder1_A7_,X,Y)
)
);
/* Parametrage partiel eventuel du "faux" produit. On notera que cela n'a d'utilite que */
/* si le produit non theorique est active et alors il n'est utilise que pour l'unique */
/* 'HHCproduit(...)' qui suit... */
aHHCpuissance(puissance_courante
,point_courant
,Iiteration_polynome_variable_quelconque_dans_HHC_____premier_exposant_du_polynome
);
aHHCcombinaison_lineaire_2(polynome_courant
,ponderation_du_nombre_argument_A
,nombre_argument_A_apres_transformation_eventuelle
,ponderation_du_nombre_courant_C
,point_courant
);
/* Definition du polynome et initialisation avec : */
/* */
/* polynome(O) = alpha.A + beta.C */
/* */
/* */
begin_fuite
Bblock
DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
DEFV(hyper_hyper_complexe,monome_courant);
aHHCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
aHHCsomme(polynome_courant,polynome_courant,monome_courant);
/* Calcul iteratif du polynome courant : */
/* */
/* 0 1 p */
/* polynome(O) = A .O + A .O + ... + A .O + alpha.A + beta.C */
/* 0 1 p */
/* */
/* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'... */
aHHCproduit(puissance_courante,puissance_courante,suite_point);
/* Calcul de la puissance courante suivante (Z+1) : */
/* */
/* Z+1 */
/* puissance(O) = O */
/* */
Eblock
end_fuite
HHCegal(suite_point,polynome_courant);
/* Et iteration de la fonction : */
/* */
/* O = polynome(O ) */
/* n+1 n */
/* */
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle7
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle6
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle5
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle4
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle3
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle2
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle1
);
ESaveModifyVariable(Float
,FHHCproduit_____avec_le_produit_non_theorique__exposa1_Rho
);
/* Parametrage partiel eventuel du "faux" produit. */
Eblock
)
,BLOC(VIDE;
)
/* Introduit le 20150225152454... */
);
#undef prendre_la_partie_entiere_de_ponder1_A7_
#undef prendre_la_partie_entiere_de_ponder1_A6_
#undef prendre_la_partie_entiere_de_ponder1_A5_
#undef prendre_la_partie_entiere_de_ponder1_A4_
#undef prendre_la_partie_entiere_de_ponder1_A3_
#undef prendre_la_partie_entiere_de_ponder1_A2_
#undef prendre_la_partie_entiere_de_ponder1_A1_
Eblock
end_image
RETI(imageR);
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S C A L C U L A N T */
/* U N E F O N C T I O N H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionHHJ_I_FONCTION_HHC POINTERHHJ
#define GENERE__FonctionHHJ_I_FONCTION_HHC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom) \
DEFV(FonctionHHJ,POINTERHHJ(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(imageHHJ,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
DEFV(Argument,DEFV(Float,composante_J)); \
DEFV(Argument,DEFV(Float,composante_K)); \
DEFV(Argument,DEFV(Float,composante_S)); \
DEFV(Argument,DEFV(Float,composante_T)); \
DEFV(Argument,DEFV(Float,composante_U)); \
DEFV(Argument,DEFV(Float,composante_V)); \
/* Composantes complementaires definissant l'espace hyper-hyper-complexe... */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
begin_image \
Bblock \
DEFV(hyper_hyper_complexe,point_courant_transforme); \
\
INITIALISATION_DU_POINT_COURANT_DANS_HHC; \
/* Initialisation du "point Courant" 'C'. */ \
\
HHCforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta); \
/* Transformation homographique du "point Courant" 'C'. */ \
\
CALS(Nfonction(point_courant_transforme)); \
/* Application de la transformation... */ \
\
storeHHJ_point(Vfonction \
,imageR \
,X,Y \
); \
/* Generation de l'image "hyper_hyper_complexe"... */ \
Eblock \
end_image \
\
RETIHHJ(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' cos ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_cosinus_circulaire_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"cos" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sin ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_sinus_circulaire_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sin" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' tg ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_tangente_circulaire_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"tg" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' ch ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_cosinus_hyperbolique_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"ch" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' sh ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_sinus_hyperbolique_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"sh" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' th ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_tangente_hyperbolique_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"th" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' exp ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_exponentielle_neperienne_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"exp" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A F O N C T I O N ' log ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionHHJ
DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_logarithme_dans_HHC( /* Common,DEFV(Fonction,) : \ */
imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____Halpha /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____Hbeta_ /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____Hgamma /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____Hdelta /* Common,DEFV(Fonction,) : \ */
,"log" /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionHHJ
#undef GENERE__FonctionHHJ_I_FONCTION_HHC
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T E U R D E F O N C T I O N S I T E R A N T */
/* U N E F O N C T I O N H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
#pragma xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction GENERE__FonctionP_I_ITERAT_F_HHC POINTERp
#define GENERE__FonctionP_I_ITERAT_F_HHC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module,czero,vz,fz) \
/* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees */ \
/* a la recuperation automatique des fichiers d'arguments ; on trouvera donc : */ \
/* */ \
/* GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction) */ \
/* */ \
/* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre */ \
/* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f'). */ \
/* */ \
/* Le 20210212153501, l'argument 'czero' qui permet de changer le zero, puis le */ \
/* 20210213103027 ce fut le cas de 'vz' et 'fz' qui definissent respectivement le "Vrai" */ \
/* zero (celui qui correpond au type 'hyper_hyper_complexe' et qui n'est pas modifiable) */ \
/* et le "Faux" zero (celui qui peut etre modifier pour, par exemple, faire "du Mandelbrot" */ \
/* -ou presque- ci-apres...). */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) \
/* ATTENTION, il ne faut pas ecrire : */ \
/* */ \
/* DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))) */ \
/* */ \
/* mais : */ \
/* */ \
/* DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)) */ \
/* */ \
/* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par : */ \
/* */ \
/* DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(...)) */ \
/* */ \
/* Actuellement cette redondance ne serait pas genante, mais plus tard... */ \
DEFV(Argument,DEFV(image,imageR)); \
/* Image Resultat a generer. */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche))); \
/* Definition du point situe en bas et a gauche de la fenetre, */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite))); \
/* Definition du point situe en haut et a droite de la fenetre. */ \
DEFV(Argument,DEFV(Float,composante_J)); \
DEFV(Argument,DEFV(Float,composante_K)); \
DEFV(Argument,DEFV(Float,composante_S)); \
DEFV(Argument,DEFV(Float,composante_T)); \
DEFV(Argument,DEFV(Float,composante_U)); \
DEFV(Argument,DEFV(Float,composante_V)); \
/* Composantes complementaires definissant l'espace hyper-hyper-complexe... */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations)); \
/* Nombre maximal d'iterations demande. */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA1)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA2)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA3)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA4)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA5)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA6)); \
DEFV(Argument,DEFV(Float,ponderation_argumentA7)); \
/* Cet indicateur logique permet de choisir le type d'information que */ \
/* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle)) */ \
/* de O lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'). */ \
/* n */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
Bblock \
BVARIABLES_F_ITERATION_DANS_HHC \
/*..............................................................................................................................*/ \
VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE; \
\
INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC; \
\
gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES; \
\
begin_image \
Bblock \
gF_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil_du_carre_du_module) \
,BLOC(Bblock \
INITIALISATION_DU_POINT_COURANT_DANS_HHC; \
Eblock \
) \
,BLOC(Bblock \
Test(IL_FAUT(czero)) \
Bblock \
HHCegal(fz,point_courant); \
HHCegal(point_courant,vz); \
/* Introduit le 20210212153501 afin de pouvoir faire quelque chose qui ressemble au calcul */ \
/* de l'ensemble de Mandelbrot en faisant partir l'iteration du point courant au lieu de 0. */ \
/* */ \
/* C'est avec le cosinus hyperbolique 'ch(...)' que l'on s'approche le plus de l'ensemble */ \
/* de Mandelbrot en notant qu'alors c'est la fonction : */ \
/* */ \
/* 1 2 */ \
/* f(Z) = 1 + ---.Z */ \
/* 2 */ \
/* */ \
/* que l'on itere, au lieu de l'habituelle : */ \
/* */ \
/* 2 */ \
/* f(Z) = Z */ \
/* */ \
/* et ce en prenant 'v $ximcd/operator$FON INDICE_MAXIMAL_D_UNE_SERIE_TRIGONOMETRIQUE' */ \
/* egal a 2 evidemment... */ \
Eblock \
ATes \
Bblock \
HHCegal(fz,vz); \
/* A priori, on restaure le Faux zero a partir du Vrai... */ \
Eblock \
ETes \
\
HHCegal(suite_point,point_courant); \
/* Initialisation de la suite des nombres hyper_hyper_complexes sur le "point Courant" 'C', */ \
/* soit : */ \
/* */ \
/* Z = C */ \
/* 0 */ \
/* */ \
EGAL(nombre_courant_d_iterations,UN); \
/* Initialisation du compteur des iterations ; ce compteur est initialise */ \
/* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une */ \
/* valeur non nulle soit rangee... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
,BLOC(Bblock \
CALS(Nfonction(suite_point)); \
HHCegal(suite_point,Vfonction); \
/* Et iteration de la fonction : */ \
/* */ \
/* Z = Nfonction(Z ) */ \
/* n n */ \
/* */ \
/* en notant qu'il est preferable de ne pas ecrire : */ \
/* */ \
/* HHCegal(suite_point,Nfonction(suite_point)); */ \
/* */ \
/* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON HHCegal', */ \
/* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'... */ \
Eblock \
) \
,BLOC(VIDE; \
) \
); \
Eblock \
end_image \
\
RETI(imageR); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' cos ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_HHC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,DEFV(Logical,SINT(Iiteration_cosinus_circulaire_dans_HHC_____changer_le_zero,FAUX)));
/* La possibilite de changer le 'zero' a ete introduit le 20210212153501... */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_cosinus_circulaire_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_circulaire_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_circulaire_dans_HHC_____changer_le_zero /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,FgHHCserie_cosinus_____HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sin ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_HHC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,DEFV(Logical,SINT(Iiteration_sinus_circulaire_dans_HHC_____changer_le_zero,FAUX)));
/* La possibilite de changer le 'zero' a ete introduit le 20210212153501... */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_sinus_circulaire_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_circulaire_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_circulaire_dans_HHC_____changer_le_zero /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,FgHHCserie_sinus_____HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' tg ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_HHC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_tangente_circulaire_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_circulaire_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_circulaire_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,FAUX /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' ch ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_HHC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,DEFV(Logical,SINT(Iiteration_cosinus_hyperbolique_dans_HHC_____changer_le_zero,FAUX)));
/* La possibilite de changer le 'zero' a ete introduit le 20210212153501... */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_cosinus_hyperbolique_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCcosinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_hyperbolique_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,Iiteration_cosinus_hyperbolique_dans_HHC_____changer_le_zero /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,FgHHCserie_cosinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' sh ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_HHC_____seuil,FLOT(MILLE))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,DEFV(Logical,SINT(Iiteration_sinus_hyperbolique_dans_HHC_____changer_le_zero,FAUX)));
/* La possibilite de changer le 'zero' a ete introduit le 20210212153501... */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_sinus_hyperbolique_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCsinus_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_hyperbolique_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,Iiteration_sinus_hyperbolique_dans_HHC_____changer_le_zero /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,FgHHCserie_sinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' th ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_HHC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_tangente_hyperbolique_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique /* Common,DEFV(Fonction,) : \ */
,fFHHCtangente_hyperbolique_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_tangente_hyperbolique_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,FAUX /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' exp ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_HHC_____seuil,FLOT(MILLIARD))));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_exponentielle_neperienne_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne /* Common,DEFV(Fonction,) : \ */
,fFHHCexponentielle_neperienne_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_exponentielle_neperienne_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,FAUX /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I T E R A T I O N D E L A F O N C T I O N ' log ' H Y P E R - H Y P E R - C O M P L E X E : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_HHC_____seuil,FDEUX)));
/* Seuil de divergence du carre du module lors des iterations. */
DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_logarithme_dans_HHC(imageR /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_bas_gauche) /* Common,DEFV(Fonction,) : \ */
,ARGUMENT_POINTERs(coin_haut_droite) /* Common,DEFV(Fonction,) : \ */
,composante_J /* Common,DEFV(Fonction,) : \ */
,composante_K /* Common,DEFV(Fonction,) : \ */
,composante_S /* Common,DEFV(Fonction,) : \ */
,composante_T /* Common,DEFV(Fonction,) : \ */
,composante_U /* Common,DEFV(Fonction,) : \ */
,composante_V /* Common,DEFV(Fonction,) : \ */
,nombre_maximal_d_iterations /* Common,DEFV(Fonction,) : \ */
,visualisation_arguments_de_sortie /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA1 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA2 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA3 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA4 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA5 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA6 /* Common,DEFV(Fonction,) : \ */
,ponderation_argumentA7 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme /* Common,DEFV(Fonction,) : \ */
,fFHHClogarithme_____valeur /* Common,DEFV(Fonction,) : \ */
,Iiteration_logarithme_dans_HHC_____seuil /* Common,DEFV(Fonction,) : \ */
,FAUX /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
,HHC_____octonion__0__0__0__0__0__0__0__0 /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : \ */
) /* Common,DEFV(Fonction,) : */
/* Fonction introduite le 20210206123600... */
EFonctionP
#undef GENERE__FonctionP_I_ITERAT_F_HHC
#undef TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE
#undef TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE
#undef INITIALISATION_DU_POINT_COURANT_DANS_HHC
#undef BVARIABLES_F_ITERATION_DANS_HHC
#undef ROTATION_TRIDIMENSIONNELLE_DANS_HHC
#undef VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC
#undef SEUIL_MODULE_DANS_HHC
#undef TEST_DU_CARRE_DU_MODULE_DANS_HHC
#undef F_ITERATION_QUELCONQUE_DANS_HHC
#undef BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC
#undef F_ITERATION_DANS_HHC
#undef gF_ITERATION_DANS_HHC
#undef gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES
#undef TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE
#undef INVERSION_D_UNE_COMPOSANTE
#undef PARAMETRE_D_INVERSION_Ri2
#undef PARAMETRE_D_INVERSION_Rs2
#undef REPLIEMENT_D_UNE_COMPOSANTE
#undef REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE
#undef REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE
#undef REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE
#undef NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW
#undef TESTER_L_UNDERFLOW_ET_L_OVERFLOW
#undef PAS_ASSEZ_D_ITERATIONS
#undef ITERATIONS_DIVERSES_____EXTREMITE
#undef ITERATIONS_DIVERSES_____ORIGINE__
#undef ITERATIONS_DIVERSES_____REPLIER_L_ESPACE
#undef EXPOSANT_INUTILE
#undef BVARIABLES_D_HOMOTHETIE_C_HC_HHC
#undef VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE
#undef Y_PLAN_IMAGE_MODULO
#undef X_PLAN_IMAGE_MODULO
#undef Y_PLAN_IMAGE
#undef X_PLAN_IMAGE
#undef Y_IMAGE_PLAN
#undef X_IMAGE_PLAN
#undef Y_COIN_HAUT_DROITE
#undef X_COIN_HAUT_DROITE
#undef Y_COIN_BAS_GAUCHE
#undef X_COIN_BAS_GAUCHE
#undef VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE
#undef RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC
#undef INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC
#undef fNON_APPARTENANCE_A_L_ENSEMBLE
#undef fAPPARTENANCE_A_L_ENSEMBLE
#undef NON_APPARTENANCE_A_L_ENSEMBLE
#undef APPARTENANCE_A_L_ENSEMBLE
_______________________________________________________________________________________________________________________________________