/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E   L A   C O M P L E X I T E   S T R U C T U R E L L E                                                      */
/*        D ' U N E   C O U R B E   D E   H I L B E R T  :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrC/ObjetComplexe.I1$vv$c' :                                                                                   */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20130614185344).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    COMMENTS
#         undef     COMMENTS
#else
#endif

#define   COMMENTS  "Courbe de Hilbert (format octet) -noir ou blanc-"

#define   DEFINE_01 "-DPROFONDEUR=3"
#define   DEFINE_02 "-DPROFONDEUR=5"
#define   DEFINE_03 "-DPROFONDEUR=7"
#define   DEFINE_04 "-DPROFONDEUR=9"

#include  "images_1octet.01.vv.I"

#include  "Fpuissance.01.vv.I"

#ifndef   PROFONDEUR
#         define    PROFONDEUR                                                                                                          \
                              (6)                                                                                                       \
                                        /* On notera qu'une 'PROFONDEUR' egale a 11 remplit exactement un carre 'Sdu'.               */
#else
#endif

#define   REGLE_PLUS___                                                                                                                 \
                    {                                                                                                                   \
                    int       new_deplacement_X=-deplacement_Y;                                                                         \
                    int       new_deplacement_Y=+deplacement_X;                                                                         \
                    deplacement_X=new_deplacement_X;                                                                                    \
                    deplacement_Y=new_deplacement_Y;                                                                                    \
                    }                                                                                                                   \
                                        /* Regle "+" (rotation de +pi/2, soir une multiplication par '+i').                          */
#define   REGLE_MOINS__                                                                                                                 \
                    {                                                                                                                   \
                    int       new_deplacement_X=+deplacement_Y;                                                                         \
                    int       new_deplacement_Y=-deplacement_X;                                                                         \
                    deplacement_X=new_deplacement_X;                                                                                    \
                    deplacement_Y=new_deplacement_Y;                                                                                    \
                    }                                                                                                                   \
                                        /* Regle "-" (rotation de -pi/2, soir une multiplication par '-i').                          */

int       longueur;
#define   REGLE_FORWARD                                                                                                                 \
                    {                                                                                                                   \
                    int       n;                                                                                                        \
                                                                                                                                        \
                    for       (n=1 ; n <= longueur ; n=ADD2(n,1))                                                                       \
                              {                                                                                                         \
                              STORE_IMAGE_PLAN(point_courant_X,point_courant_Y,BLANC);                                                  \
                                                                                                                                        \
                              point_courant_X=ADD2(point_courant_X,deplacement_X);                                                      \
                              point_courant_Y=ADD2(point_courant_Y,deplacement_Y);                                                      \
                              }                                                                                                         \
                                                                                                                                        \
                    STORE_IMAGE_PLAN(point_courant_X,point_courant_Y,BLANC);                                                            \
                                        /* Marquage du dernier point...                                                              */ \
                    }                                                                                                                   \
                                        /* Regle "F" (deplacement en avant).                                                         */

#define   REGLE_RIGHT__                                                                                                                 \
                    {                                                                                                                   \
                    GenerationDeLaCourbeDeHilbert_R(profondeur-1);                                                                      \
                    }                                                                                                                   \
                                        /* Regle "R" (deplacement a droite -"Right"-).                                               */
#define   REGLE_LEFT___                                                                                                                 \
                    {                                                                                                                   \
                    GenerationDeLaCourbeDeHilbert_L(profondeur-1);                                                                      \
                    }                                                                                                                   \
                                        /* Regle "L" (deplacement a gauche -"Left"-).                                                */
int       point_courant_X;
int       point_courant_Y;

int       deplacement_X=1;
int       deplacement_Y=0;

int       GenerationDeLaCourbeDeHilbert_R(profondeur)
int       profondeur;
          {
          if        (profondeur > 0)
                    {
                    REGLE_MOINS__;
                    REGLE_LEFT___;
                    REGLE_FORWARD;
                    REGLE_PLUS___;
                    REGLE_RIGHT__;
                    REGLE_FORWARD;
                    REGLE_RIGHT__;
                    REGLE_PLUS___;
                    REGLE_FORWARD;
                    REGLE_LEFT___;
                    REGLE_MOINS__;
                                        /* Reecriture :                                                                              */
                                        /*                                                                                           */
                                        /*                  R --> -LF+RFR+FL-                                                        */
                                        /*                                                                                           */
                                        /* qui est le "complement" de :                                                              */
                                        /*                                                                                           */
                                        /*                  L --> +RF-LFL-FR+                                                        */
                                        /*                                                                                           */
                    }
          else
                    {
                    }
          }

int       GenerationDeLaCourbeDeHilbert_L(profondeur)
int       profondeur;
          {
          if        (profondeur > 0)
                    {
                    REGLE_PLUS___;
                    REGLE_RIGHT__;
                    REGLE_FORWARD;
                    REGLE_MOINS__;
                    REGLE_LEFT___;
                    REGLE_FORWARD;
                    REGLE_LEFT___;
                    REGLE_MOINS__;
                    REGLE_FORWARD;
                    REGLE_RIGHT__;
                    REGLE_PLUS___;
                                        /* Reecriture :                                                                              */
                                        /*                                                                                           */
                                        /*                  L --> +RF-LFL-FR+                                                        */
                                        /*                                                                                           */
                                        /* qui est le "complement" de :                                                              */
                                        /*                                                                                           */
                                        /*                  R --> -LF+RFR+FL-                                                        */
                                        /*                                                                                           */
                    }
          else
                    {
                    }
          }

MAIN(
          {
          int       profondeur=PROFONDEUR;

          INITIALISATION_IMAGE(NOIR);

          longueur=DIVI(DIVI(dimXY,2),Fpuissance(2,SOUS(profondeur,2)));

          point_courant_X=ADD2(Xmin,DIVI(longueur,2));
          point_courant_Y=ADD2(Ymin,DIVI(longueur,2));

          REGLE_LEFT___;

          SORTIE_DU_FICHIER_IMAGE;
          EDITER_LES_COMPTEURS_DES_FONCTIONS;
          }
     )



Copyright © Jean-François Colonna, 2013-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2013-2021.