/* Mathematiques de l'Infographie */ /* Test des classes TG3D, Tr3D, Rt3D et Sc3D */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Mars 2019 */ #if defined(WIN32) || defined(WIN64) #define _CRTDBG_MAP_ALLOC #if defined(_DEBUG) #define _AFXDLL #include #endif #endif #include #if defined(WIN32) || defined(WIN64) #include #endif #include #include "Pos3D.h" #include "Dir3D.h" #include "Tr3D.h" #include "Rt3D.h" #include "Sc3D.h" static void afficher(char *message,CH3D *ch) { printf("%s",message); ch->print(); printf("\n"); } void main(void) { #if defined(WIN32) || defined(WIN64) #if defined(_DEBUG) _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //_crtBreakAlloc = 120; #endif #endif Tr3D *tr = new Tr3D(-4.5,0.1,3.2); printf("Translation\n"); tr->print(); printf("\n"); Rt3D *rt = new Rt3D(30.0,&Dir3D(2.1,-0.7,1.8)); printf("Rotation\n"); rt->print(); printf("\n"); Pos3D *pos = new Pos3D(-1.1,-0.2,-2.3); Dir3D *dir = new Dir3D(-1.1,-0.2,-2.3); printf("Transformations d'une position 3D\n"); afficher("Valeur initiale : ",pos); tr->transformation(pos); afficher("Valeur apres translation : ",pos); rt->transformation(pos); afficher("Valeur apres rotation : ",pos); printf("\n"); printf("Transformations d'une direction 3D\n"); afficher("Valeur initiale : ",dir); tr->transformation(dir); afficher("Valeur apres translation : ",dir); rt->transformation(dir); afficher("Valeur apres rotation : ",dir); printf("\n"); printf("Compositions de transformations geometriques\n"); TG3D tg1(tr,rt); printf("Translation * Rotation\n"); tg1.print(); printf("\n"); TG3D tg2(rt,tr); printf("Rotation * Translation\n"); tg2.print(); printf("\n"); delete(rt); delete(tr); delete(pos); delete(dir); printf("Test setter\n"); double m1[4][4] = { { -1.0/6.0, 3.0/6.0, -3.0/6.0, 1.0/6.0 }, { 3.0/6.0, -6.0/6.0, 3.0/6.0, 0.0 }, { -3.0/6.0, 0.0, 3.0/6.0, 0.0 }, { 1.0/6.0, 4.0/6.0, 1.0/6.0, 0.0 } }; double m2[4][4] = { { 0.9156, 0.3959, 0.0703, 0.0 }, { -0.3727, 0.7702, 0.5176, 0.0 }, { 0.1508, -0.5001, 0.8528, 0.0 }, { 0.0 , 0.0 , 0.0 , 1.0 } }; Rt3D rot; TG3D *tg = &rot; tg->print(); printf("\n"); tg->set(m1); tg->print(); printf("\n"); tg->set(m2); tg->print(); printf("\n"); Rt3D rotation(22.0F,1.0F,2.0F,-3.0F); double m[4][4]; rotation.get(m); tg->set(m); tg->print(); printf("Test composition\n"); Rt3D rt1(10.0,1.0,1.0,1.0); Rt3D rt2(0.0,1.0,1.0,1.0); Tr3D tr1(1.0,2.0,0.0); Tr3D tr2(0.0,0.0,0.0); Rt3D rt3; printf("%s\n",(rt3.composition(&rt1,&tr2)) ? "Composition Realisee" : "Composition impossible"); Tr3D tr3; printf("%s\n",(tr3.composition(&rt2,&tr1)) ? "Composition Realisee" : "Composition impossible"); }