/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   R E C T A N G L E S   D ' O R  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_RectangleOr$K' :                                                                                   */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20171212140008).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   INVERSER_L_AXE_OX                                                                                                             \
                    FAUX
#define   INVERSER_L_AXE_OY                                                                                                             \
                    FAUX
                                        /* Afin de permettre d'inverser les axes 'OX' et 'OY' (introduit le 20171213110412).         */
#define   TRANSLATION_OX                                                                                                                \
                    FZERO
#define   TRANSLATION_OY                                                                                                                \
                    FZERO
                                        /* Afin de permettre de translater les axes 'OX' et 'OY' (introduit le 20171213114417).      */

#define   CENTRER_LE_PREMIER_RECTANGLE                                                                                                  \
                    VRAI
#define   X_SOMMET_BAS_GAUCHE                                                                                                           \
                    FXmin
#define   Y_SOMMET_BAS_GAUCHE                                                                                                           \
                    FYmin
                                        /* Definition du sommet en bas et a gauche.                                                  */

#define   COTE_HORIZONTAL                                                                                                               \
                    NOMBRE_D_OR
#define   COTE_VERTICAL__                                                                                                               \
                    FU
                                        /* Definition des deux cotes d'un rectangle.                                                 */

#define   RAPPORT_DE_REDUCTION                                                                                                          \
                    NOMBRE_D_OR                                                                                                         \
                                        /* Definition du rapport de reduction.                                                       */

#define   EDITER_LES_COTES                                                                                                              \
                    VRAI
#define   EDITER_LES_SOMMETS                                                                                                            \
                    VRAI
                                        /* Controle des editions...                                                                  */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/valeurs.02.I"

#define   INVERSER_EVENTUELLEMENT_OX(deplacement)                                                                                       \
                    MUL2(COND(IL_FAUT(inverser_l_axe_OX),NEGA(FU),NEUT(FU)),deplacement)
#define   INVERSER_EVENTUELLEMENT_OY(deplacement)                                                                                       \
                    MUL2(COND(IL_FAUT(inverser_l_axe_OY),NEGA(FU),NEUT(FU)),deplacement)
                                        /* Introduit le 20171213110412 pour permettre l'inversion eventuelle des axes. Etant         */
                                        /* donne qu'il y a quatre possibilites, on peut ainsi simuler 'v $xci/tapisserie$K' comme    */
                                        /* le montre l'image 'v $xiirv/REOR.21'...                                                   */

#define   EDITION_DES_COTES(editer,format_coordonnees_normalisees,cote)                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_les_cotes))                                                                                     \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(editer))                                                                                          \
                              Bblock                                                                                                    \
                              CAL2(Prin1(format_coordonnees_normalisees                                                                 \
                                        ,cote                                                                                           \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CAL2(Prin0("\n"));                                                                                        \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition des coordonnees des segments.                                                     */

#define   EDITION_DES_COORDONNEES_DES_SOMMETS(editer,format_coordonnees_normalisees,X,Y)                                                \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_les_sommets))                                                                                   \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(editer))                                                                                          \
                              Bblock                                                                                                    \
                              CAL2(Prin2(format_coordonnees_normalisees                                                                 \
                                        ,X                                                                                              \
                                        ,Y                                                                                              \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CAL2(Prin0("\n"));                                                                                        \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition des coordonnees des segments.                                                     */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   R E C T A N G L E S   D ' O R  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */

     DEFV(Logical,INIT(inverser_l_axe_OX,INVERSER_L_AXE_OX));
     DEFV(Logical,INIT(inverser_l_axe_OY,INVERSER_L_AXE_OY));
                                        /* Afin de permettre d'inverser les axes 'OX' et 'OY' (introduit le 20171213110412).         */
     DEFV(Float,INIT(translation_OX,TRANSLATION_OX));
     DEFV(Float,INIT(translation_OY,TRANSLATION_OY));
                                        /* Afin de permettre de translater les axes 'OX' et 'OY' (introduit le 20171213114417).      */

     DEFV(Logical,INIT(centrer_le_premier_rectangle,CENTRER_LE_PREMIER_RECTANGLE));
     DEFV(Float,INIT(X_sommet_bas_gauche,X_SOMMET_BAS_GAUCHE));
     DEFV(Float,INIT(Y_sommet_bas_gauche,Y_SOMMET_BAS_GAUCHE));
                                        /* Definition du sommet en bas et a gauche.                                                  */
     DEFV(Float,INIT(cote_horizontal,COTE_HORIZONTAL));
     DEFV(Float,INIT(cote_vertical__,COTE_VERTICAL__));
                                        /* Definition des deux cotes d'un rectangle.                                                 */
     DEFV(Float,INIT(rapport_de_reduction,RAPPORT_DE_REDUCTION));
                                        /* Rapport de passage d'un nombre au suivant.                                                */

     DEFV(Local,DEFV(Logical,INIT(editer_les_cotes,EDITER_LES_COTES)));
     DEFV(Local,DEFV(Logical,INIT(editer_les_sommets,EDITER_LES_SOMMETS)));
                                        /* Controle des editions...                                                                  */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_I("premiere=""p=""D=",premiere_image);
                         GET_ARGUMENT_I("derniere=""d=""A=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);

                         GET_ARGUMENT_L("inverserX=""iX=",inverser_l_axe_OX);
                         GET_ARGUMENT_L("inverserY=""iY=",inverser_l_axe_OY);
                                        /* Arguments introduits le 20171213110412...                                                 */
                         GET_ARGUMENT_F("translationX=""tX=",translation_OX);
                         GET_ARGUMENT_F("translationY=""tY=",translation_OY);
                                        /* Arguments introduits le 20171213114417...                                                 */

                         GET_ARGUMENT_L("centrer=",centrer_le_premier_rectangle);
                         GET_ARGUMENT_F("X_sommet_bas_gauche=""Xsbg=",X_sommet_bas_gauche);
                         GET_ARGUMENT_F("Y_sommet_bas_gauche=""Ysbg=",Y_sommet_bas_gauche);

                         GET_ARGUMENT_F("cote_horizontal=""ch=",cote_horizontal);
                         GET_ARGUMENT_F("cote_vertical=""cv=",cote_vertical__);

                         GET_ARGUMENT_F("rapport=""r=",rapport_de_reduction);

                         GET_ARGUMENT_L("editer_cotes=""cotes=",editer_les_cotes);
                         GET_ARGUMENT_L("editer_sommets=""sommets=",editer_les_sommets);
                         )
                    );

     Test(IL_FAUT(centrer_le_premier_rectangle))
          Bblock
          EGAL(X_sommet_bas_gauche,ADD2(SOUS(FXmilieu,INVERSER_EVENTUELLEMENT_OX(MOIT(cote_horizontal))),translation_OX));
          EGAL(Y_sommet_bas_gauche,ADD2(SOUS(FYmilieu,INVERSER_EVENTUELLEMENT_OY(MOIT(cote_vertical__))),translation_OY));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          DEFV(Float,INIT(cote_horizontal_courant,cote_horizontal));
          DEFV(Float,INIT(cote_vertical___courant,cote_vertical__));
                                        /* Definition des deux cotes d'un rectangle.                                                 */
          DEFV(pointF_2D,sommet_A);
          DEFV(pointF_2D,sommet_B);
          DEFV(pointF_2D,sommet_C);
          DEFV(pointF_2D,sommet_D);
                                        /* Definition des sommets du rectangle.                                                      */

          INITIALISATION_POINT_2D(sommet_A,NEUT(X_sommet_bas_gauche),NEUT(Y_sommet_bas_gauche));
                                        /* Initialisation du sommet 'A' qui ne changera pas au cours des iterations...               */

          Test(IFLE(premiere_image,derniere_image))
               Bblock
               DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
                    Bblock
                    INITIALISATION_POINT_2D(sommet_B
                                           ,ADD2(ASD1(sommet_A,x),INVERSER_EVENTUELLEMENT_OX(cote_horizontal_courant))
                                           ,NEUT(ASD1(sommet_A,y))
                                            );
                    INITIALISATION_POINT_2D(sommet_C
                                           ,NEUT(ASD1(sommet_B,x))
                                           ,ADD2(ASD1(sommet_B,y),INVERSER_EVENTUELLEMENT_OY(cote_vertical___courant))
                                            );
                    INITIALISATION_POINT_2D(sommet_D
                                           ,SOUS(ASD1(sommet_C,x),INVERSER_EVENTUELLEMENT_OX(cote_horizontal_courant))
                                           ,NEUT(ASD1(sommet_C,y))
                                            );
                                        /* Calcul des sommets 'B', 'C' et 'D' qui se deplacent au cours des iterations...            */

                    EDITION_DES_COTES(VRAI,"CoteHorizontal=%+.^^^",cote_horizontal_courant);
                    EDITION_DES_COTES(VRAI,"CoteVertical=%+.^^^",cote_vertical___courant);

                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xA=%+.^^^ yA=%+.^^^",ASD1(sommet_A,x),ASD1(sommet_A,y));
                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xB=%+.^^^ yB=%+.^^^",ASD1(sommet_B,x),ASD1(sommet_B,y));

                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xB=%+.^^^ yB=%+.^^^",ASD1(sommet_B,x),ASD1(sommet_B,y));
                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xC=%+.^^^ yC=%+.^^^",ASD1(sommet_C,x),ASD1(sommet_C,y));

                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xC=%+.^^^ yC=%+.^^^",ASD1(sommet_C,x),ASD1(sommet_C,y));
                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xD=%+.^^^ yD=%+.^^^",ASD1(sommet_D,x),ASD1(sommet_D,y));

                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xD=%+.^^^ yD=%+.^^^",ASD1(sommet_D,x),ASD1(sommet_D,y));
                    EDITION_DES_COORDONNEES_DES_SOMMETS(VRAI,"xA=%+.^^^ yA=%+.^^^",ASD1(sommet_A,x),ASD1(sommet_A,y));

                    fSWAP(cote_horizontal_courant,cote_vertical___courant);
                    EGAL(cote_horizontal_courant,DIVI(cote_horizontal_courant,rapport_de_reduction));
                    EGAL(cote_vertical___courant,DIVI(cote_vertical___courant,rapport_de_reduction));
                                        /* Rotation et reduction...                                                                  */
                    Eblock
               EDoI
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee");
               Eblock
          ETes
          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



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