/*************************************************************************************************************************************/
/* */
/* R O T A T I O N D ' U N P R O J E C T O R T R I D I M E N S I O N N E L : */
/* */
/* */
/* Author of '$xrs/RotProj3D.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20060602141127). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CPP_____MODULE_NON_DERIVABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE \
VRAI \
/* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation */ \
/* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles... */
#define RAPPORT_DE_ZOOM \
ABSENCE_D_EFFET_DE_ZOOM \
/* Rapport de zoom (introduit le 20060603095209). */
#define ROTATION_OX_IMPLICITE \
FZERO
#define ROTATION_OY_IMPLICITE \
FZERO
#define ROTATION_OZ_IMPLICITE \
FZERO
/* Angles de rotation. */
#define TRANSLATION_OX_IMPLICITE \
FZERO
#define TRANSLATION_OY_IMPLICITE \
FZERO
#define TRANSLATION_OZ_IMPLICITE \
FZERO
/* Translation de l'origine. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
/* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque */
/* c'est en effet 'Zmax' qui joue ce role... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R O T A T I O N D ' U N P R O J E C T O R T R I D I M E N S I O N N E L : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_albumAFx),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeAFx),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageAFx,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesAFx,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresAFx,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Argument 'Fx'... */
DEFV(CHAR,INIC(POINTERc(nom_albumAFy),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeAFy),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageAFy,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesAFy,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresAFy,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Argument 'Fy'... */
DEFV(CHAR,INIC(POINTERc(nom_albumAFz),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeAFz),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageAFz,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesAFz,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresAFz,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Argument 'Fz'... */
DEFV(CHAR,INIC(POINTERc(nom_albumRFx),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeRFx),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageRFx,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesRFx,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresRFx,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Resultat 'Fx'... */
DEFV(CHAR,INIC(POINTERc(nom_albumRFy),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeRFy),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageRFy,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesRFy,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresRFy,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Resultat 'Fy'... */
DEFV(CHAR,INIC(POINTERc(nom_albumRFz),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_postfixeRFz),NOM_UNDEF_VIDE));
DEFV(Int,INIT(premiere_imageRFz,PREMIERE_IMAGE));
DEFV(Int,INIT(pas_des_imagesRFz,PAS_DES_IMAGES));
DEFV(Int,INIT(nombre_de_chiffresRFz,NOMBRE_DE_CHIFFRES));
/* Definition de l'album Resultat 'Fz'... */
DEFV(Logical,INIT(faire_une_rotation_tridimensionnelle,FAIRE_UNE_ROTATION_TRIDIMENSIONNELLE));
/* Faut-il faire une rotation tridimensionnelle ('VRAI') ou bien une transformation */
/* arbitraire ('FAUX') ce qui ouvre la porte a des 'IFS' tridimensionnelles... */
DEFV(Float,INIT(rapport_DE_ZOOM,RAPPORT_DE_ZOOM));
/* Rapport de zoom (introduit le 20060603095209). */
DEFV(Float,INIT(angle_de_ROTATION_OX,ROTATION_OX_IMPLICITE));
DEFV(Float,INIT(angle_de_ROTATION_OY,ROTATION_OY_IMPLICITE));
DEFV(Float,INIT(angle_de_ROTATION_OZ,ROTATION_OZ_IMPLICITE));
/* Angles de rotation. */
DEFV(Float,INIT(translation_OX,TRANSLATION_OX_IMPLICITE));
DEFV(Float,INIT(translation_OY,TRANSLATION_OY_IMPLICITE));
DEFV(Float,INIT(translation_OZ,TRANSLATION_OZ_IMPLICITE));
/* Translation de l'origine. */
/*..............................................................................................................................*/
INITIALISATION_TRANSFORMATION;
/* Mise en place de la transformation neutre... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(
GET_ARGUMENT_C("albumAFx=""AFx=",nom_albumAFx);
GET_ARGUMENT_C("postfixeAFx=",nom_postfixeAFx);
GET_ARGUMENT_I("premiereAFx=",premiere_imageAFx);
GET_ARGUMENT_I("pasAFx=",pas_des_imagesAFx);
GET_ARGUMENT_I("chiffresAFx=",nombre_de_chiffresAFx);
GET_ARGUMENT_C("albumAFy=""AFy=",nom_albumAFy);
GET_ARGUMENT_C("postfixeAFy=",nom_postfixeAFy);
GET_ARGUMENT_I("premiereAFy=",premiere_imageAFy);
GET_ARGUMENT_I("pasAFy=",pas_des_imagesAFy);
GET_ARGUMENT_I("chiffresAFy=",nombre_de_chiffresAFy);
GET_ARGUMENT_C("albumAFz=""AFz=",nom_albumAFz);
GET_ARGUMENT_C("postfixeAFz=",nom_postfixeAFz);
GET_ARGUMENT_I("premiereAFz=",premiere_imageAFz);
GET_ARGUMENT_I("pasAFz=",pas_des_imagesAFz);
GET_ARGUMENT_I("chiffresAFz=",nombre_de_chiffresAFz);
GET_ARGUMENT_C("albumRFx=""RFx=",nom_albumRFx);
GET_ARGUMENT_C("postfixeRFx=",nom_postfixeRFx);
GET_ARGUMENT_I("premiereRFx=",premiere_imageRFx);
GET_ARGUMENT_I("pasRFx=",pas_des_imagesRFx);
GET_ARGUMENT_I("chiffresRFx=",nombre_de_chiffresRFx);
GET_ARGUMENT_C("albumRFy=""RFy=",nom_albumRFy);
GET_ARGUMENT_C("postfixeRFy=",nom_postfixeRFy);
GET_ARGUMENT_I("premiereRFy=",premiere_imageRFy);
GET_ARGUMENT_I("pasRFy=",pas_des_imagesRFy);
GET_ARGUMENT_I("chiffresRFy=",nombre_de_chiffresRFy);
GET_ARGUMENT_C("albumRFz=""RFz=",nom_albumRFz);
GET_ARGUMENT_C("postfixeRFz=",nom_postfixeRFz);
GET_ARGUMENT_I("premiereRFz=",premiere_imageRFz);
GET_ARGUMENT_I("pasRFz=",pas_des_imagesRFz);
GET_ARGUMENT_I("chiffresRFz=",nombre_de_chiffresRFz);
GET_ARGUMENT_L("rotation=",faire_une_rotation_tridimensionnelle);
GET_ARGUMENT_F("ZOOM=",rapport_DE_ZOOM);
PROCESS_ARGUMENT_F("ROTATION_OX=",angle_de_ROTATION_OX
,BLOC(VIDE;)
,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0X,nombre_d_arguments_recuperes);
)
);
PROCESS_ARGUMENT_F("ROTATION_OY=",angle_de_ROTATION_OY
,BLOC(VIDE;)
,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Y,nombre_d_arguments_recuperes);
)
);
PROCESS_ARGUMENT_F("ROTATION_OZ=",angle_de_ROTATION_OZ
,BLOC(VIDE;)
,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Z,nombre_d_arguments_recuperes);
)
);
GET_ARGUMENT_F("a11=",ASD2(vecteurs_____matrix_3D,cx,cx));
GET_ARGUMENT_F("a12=",ASD2(vecteurs_____matrix_3D,cx,cy));
GET_ARGUMENT_F("a13=",ASD2(vecteurs_____matrix_3D,cx,cz));
GET_ARGUMENT_F("a21=",ASD2(vecteurs_____matrix_3D,cy,cx));
GET_ARGUMENT_F("a22=",ASD2(vecteurs_____matrix_3D,cy,cy));
GET_ARGUMENT_F("a23=",ASD2(vecteurs_____matrix_3D,cy,cz));
GET_ARGUMENT_F("a31=",ASD2(vecteurs_____matrix_3D,cz,cx));
GET_ARGUMENT_F("a32=",ASD2(vecteurs_____matrix_3D,cz,cy));
GET_ARGUMENT_F("a33=",ASD2(vecteurs_____matrix_3D,cz,cz));
GET_ARGUMENT_F("tX=""TRANSLATION_OX=",translation_OX);
GET_ARGUMENT_F("tY=""TRANSLATION_OY=",translation_OY);
GET_ARGUMENT_F("tZ=""TRANSLATION_OZ=",translation_OZ);
)
);
begin_nouveau_block
Bblock
BDEFV(albumF,Album_AFx);
BDEFV(albumF,Album_AFy);
BDEFV(albumF,Album_AFz);
/* Definition des trois projections Arguments. */
BDEFV(albumF,Album_RFx);
BDEFV(albumF,Album_RFy);
BDEFV(albumF,Album_RFz);
/* Definition des trois projections Resultats. */
CALi(dAloadF_album(Album_AFx
,nom_albumAFx
,nom_postfixeAFx
,premiere_imageAFx
,pas_des_imagesAFx
,nombre_de_chiffresAFx
,FAUX
,UNDEF
,FAUX
)
);
CALi(dAloadF_album(Album_AFy
,nom_albumAFy
,nom_postfixeAFy
,premiere_imageAFy
,pas_des_imagesAFy
,nombre_de_chiffresAFy
,FAUX
,UNDEF
,FAUX
)
);
CALi(dAloadF_album(Album_AFz
,nom_albumAFz
,nom_postfixeAFz
,premiere_imageAFz
,pas_des_imagesAFz
,nombre_de_chiffresAFz
,FAUX
,UNDEF
,FAUX
)
);
/* Chargement des trois projections Arguments. */
/* */
/* L'argument 'Inv' ('FAUX') a ete introduit le 20091125135416... */
Test(IL_FAUT(faire_une_rotation_tridimensionnelle))
Bblock
T_ZOOM(rapport_DE_ZOOM);
/* Mise en place du zoom (introduit le 20060603095209). */
GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X
,T_ROTATION_X(angle_de_ROTATION_OX);
,vecteurs_____ordre_de_la_ROTATION_0Y
,T_ROTATION_Y(angle_de_ROTATION_OY);
,vecteurs_____ordre_de_la_ROTATION_0Z
,T_ROTATION_Z(angle_de_ROTATION_OZ);
);
/* Mise en place du produit des trois rotations relatives aux trois axes. */
Eblock
ATes
Bblock
/* Dans le cas ou la transformation est arbitraire, les coefficients de la matrice sont */
/* supposes corrects apres leur entree (totale ou partielle...). */
Eblock
ETes
begin_album
Bblock
AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fx(AloadF_point(Album_AFx,X,Y,Z)
,AloadF_point(Album_AFy,X,Y,Z)
,AloadF_point(Album_AFz,X,Y,Z)
,translation_OX
)
,Album_RFx
,X
,Y
,Z
);
AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fy(AloadF_point(Album_AFx,X,Y,Z)
,AloadF_point(Album_AFy,X,Y,Z)
,AloadF_point(Album_AFz,X,Y,Z)
,translation_OY
)
,Album_RFy
,X
,Y
,Z
);
AstoreF_point(TRANSFORMATION_GEOMETRIQUE_3D_Fz(AloadF_point(Album_AFx,X,Y,Z)
,AloadF_point(Album_AFy,X,Y,Z)
,AloadF_point(Album_AFz,X,Y,Z)
,translation_OZ
)
,Album_RFz
,X
,Y
,Z
);
/* Rotation des trois projections... */
Eblock
end_album
CALi(dAupdateF_album(nom_albumRFx
,nom_postfixeRFx
,premiere_imageRFx
,pas_des_imagesRFx
,Album_RFx
,nombre_de_chiffresRFx
,FAUX
)
);
CALi(dAupdateF_album(nom_albumRFy
,nom_postfixeRFy
,premiere_imageRFy
,pas_des_imagesRFy
,Album_RFy
,nombre_de_chiffresRFy
,FAUX
)
);
CALi(dAupdateF_album(nom_albumRFz
,nom_postfixeRFz
,premiere_imageRFz
,pas_des_imagesRFz
,Album_RFz
,nombre_de_chiffresRFz
,FAUX
)
);
/* Rangement des trois projections Resultats. */
/* */
/* L'argument 'Inv' ('FAUX') a ete introduit le 20100624091741... */
EDEFV(albumF,Album_RFz);
EDEFV(albumF,Album_RFy);
EDEFV(albumF,Album_RFx);
/* Definition des trois projections Resultats. */
EDEFV(albumF,Album_AFz);
EDEFV(albumF,Album_AFy);
EDEFV(albumF,Album_AFx);
/* Definition des trois projections Arguments. */
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.