/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U R J E C T I O N   F R A C T A L E   D E   [ 0 , 1 ]   D A N S   [ 0 , 1 ] x [ 0 , 1 ]   D E   P E A N O  :             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/Peano_SurjectionFractale.23$vv$c' :                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20220414142936).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  "INCLUDES.01.I"

#define   PROFONDEUR                                                                                                                    \
                    3

#define   TMIN                                                                                                                          \
                    0.0
#define   TMAX                                                                                                                          \
                    1.0

double    f0x(t)
double    t;
          {
          return(t);
          }

double    f0y(t)
double    t;
          {
          return(t);
          }

double    f1x(t,f0x,f0y)
double    t;
double    f0x(),f0y();
          {
          double    valeur=t;
                                        /* Definition d'une parabole de sommet {1/2,1} et passant par les points {0,0} et {1,0}...   */
          return(valeur);
          }

double    f1y(t,f0x,f0y)
double    t;
double    f0x(),f0y();
          {
          double    valeur=4*t*(1-t);
                                        /* Definition d'une parabole de sommet {1/2,1} et passant par les points {0,0} et {1,0}...   */
          return(valeur);
          }
#define   __Gen                                                                                                                         \
                    1
#define   NoGen                                                                                                                         \
                    0

#define   NInter                                                                                                                        \
                    4
#define   t0                                                                                                                            \
                    Tmin+(0*((Tmax-Tmin)/NInter))
#define   t1                                                                                                                            \
                    Tmin+(1*((Tmax-Tmin)/NInter))
#define   t2                                                                                                                            \
                    Tmin+(2*((Tmax-Tmin)/NInter))
#define   t3                                                                                                                            \
                    Tmin+(3*((Tmax-Tmin)/NInter))
#define   t4                                                                                                                            \
                    Tmin+(4*((Tmax-Tmin)/NInter))

double    Tmin=TMIN,Tmax=TMAX;

double ax0=+1;
double tx0=0;
double bx0=0;
double ay0=+1;
double ty0=0;
double by0=0;

double ax1=+1;
double tx1=-1;
double bx1=0;
double ay1=+1;
double ty1=-1;
double by1=+1;

double ax2=+1;
double tx2=-2;
double bx2=+1;
double ay2=+1;
double ty2=-2;
double by2=+1;

double ax3=-1;
double tx3=-3;
double bx3=+2;
double ay3=-1;
double ty3=-3;
double by3=+1;

#define   GENERE_fnx_fny(nom,F2x,F2y,F1x,F1y,GenX,GenY)                                                                                 \
                    double    nom(t,F2x,F2y)                                                                                            \
                    double    t;                                                                                                        \
                    double    F2x(),F2y();                                                                                              \
                              {                                                                                                         \
                              double    valeur;                                                                                         \
                                                                                                                                        \
                              if        ((t >= t0) && (t <= t1))                                                                        \
                                        {                                                                                               \
                                        valeur=LIZ2(GenX                                                                                \
                                                   ,AXPB(ax0,F2y(AXPB(NInter,t,tx0),&F1x,&F1y),bx0)                                     \
                                                   ,GenY                                                                                \
                                                   ,AXPB(ay0,F2x(AXPB(NInter,t,ty0),&F1x,&F1y),by0)                                     \
                                                    );                                                                                  \
                                        }                                                                                               \
                              else                                                                                                      \
                                        {                                                                                               \
                                        if        ((t >= t1  ) && (t <= t2))                                                            \
                                                  {                                                                                     \
                                                  valeur=LIZ2(GenX                                                                      \
                                                             ,AXPB(ax1,F2x(AXPB(NInter,t,tx1),&F1x,&F1y),bx1)                           \
                                                             ,GenY                                                                      \
                                                             ,AXPB(ay1,F2y(AXPB(NInter,t,ty1),&F1x,&F1y),by1)                           \
                                                              );                                                                        \
                                                  }                                                                                     \
                                        else                                                                                            \
                                                  {                                                                                     \
                                                  if        ((t >= t2  ) && (t <= t3))                                                  \
                                                            {                                                                           \
                                                            valeur=LIZ2(GenX                                                            \
                                                                       ,AXPB(ax2,F2x(AXPB(NInter,t,tx2),&F1x,&F1y),bx2)                 \
                                                                       ,GenY                                                            \
                                                                       ,AXPB(ay2,F2y(AXPB(NInter,t,ty2),&F1x,&F1y),by2)                 \
                                                                        );                                                              \
                                                            }                                                                           \
                                                  else                                                                                  \
                                                            {                                                                           \
                                                            valeur=LIZ2(GenX                                                            \
                                                                       ,AXPB(ax3,F2y(AXPB(NInter,t,tx3),&F1x,&F1y),bx3)                 \
                                                                       ,GenY                                                            \
                                                                       ,AXPB(ay3,F2x(AXPB(NInter,t,ty3),&F1x,&F1y),by3)                 \
                                                                        );                                                              \
                                                            }                                                                           \
                                                  }                                                                                     \
                                        }                                                                                               \
                              return(valeur/2);                                                                                         \
                              }

GENERE_fnx_fny(f2x,f1x,f1y,f0x,f0y,__Gen,NoGen);
GENERE_fnx_fny(f2y,f1x,f1y,f0x,f0y,NoGen,__Gen);

GENERE_fnx_fny(f3x,f2x,f2y,f1x,f1y,__Gen,NoGen);
GENERE_fnx_fny(f3y,f2x,f2y,f1x,f1y,NoGen,__Gen);

GENERE_fnx_fny(f4x,f3x,f3y,f2x,f2y,__Gen,NoGen);
GENERE_fnx_fny(f4y,f3x,f3y,f2x,f2y,NoGen,__Gen);

GENERE_fnx_fny(f5x,f4x,f4y,f3x,f3y,__Gen,NoGen);
GENERE_fnx_fny(f5y,f4x,f4y,f3x,f3y,NoGen,__Gen);

void      Surjection()
          {
          double    t;

          for       (t=Tmin ; t<=Tmax ; t=t+0.002)
                    {
                    printf("t=%f x=%f y=%f\n",t,f1x(t,&f0x,&f0y),f1y(t,&f0x,&f0y));
                    }

          for       (t=Tmin ; t<=Tmax ; t=t+0.001)
                    {
                    printf("t=%f x=%f y=%f\n",t,f2x(t,&f1x,&f1y),f2y(t,&f1x,&f1y));
                    }

          for       (t=Tmin ; t<=Tmax ; t=t+0.0005)
                    {
                    printf("t=%f x=%f y=%f\n",t,f3x(t,&f2x,&f2y),f3y(t,&f2x,&f2y));
                    }

          for       (t=Tmin ; t<=Tmax ; t=t+0.00025)
                    {
                    printf("t=%f x=%f y=%f\n",t,f4x(t,&f3x,&f3y),f4y(t,&f3x,&f3y));
                    }

          for       (t=Tmin ; t<=Tmax ; t=t+0.000125)
                    {
                    printf("t=%f x=%f y=%f\n",t,f5x(t,&f4x,&f4y),f5y(t,&f4x,&f4y));
                    }
          }

void      main()
          {
          Surjection();
          }



Copyright © Jean-François Colonna, 2022-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2023.