/* Mathematiques de l'informatique graphique */ /* Rotation 3D en coordonnees homogenes */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Mars 2020 */ #include #include #include #include "TG3D.h" #include "Rt3D.h" #include "Dir3D.h" #ifndef M_PI #define M_PI 3.14159F #endif /* Construit la rotation identite */ Rt3D::Rt3D(void):TG3D() { } /* Fonction utilitaire statique */ /* (C'est juste pour essayer) */ static void initialisation(Rt3D *rt,float alpha,Dir3D *d) { Dir3D axe(d); axe.normalisation(); float aa = alpha/180.0F*M_PI; float sn =(float) sin(aa); float cs =(float) cos(aa); rt->c[0][0] = axe.x*axe.x+cs*(1-axe.x*axe.x); rt->c[0][1] = axe.x*axe.y*(1-cs)-sn*axe.z; rt->c[0][2] = axe.x*axe.z*(1-cs)+sn*axe.y; rt->c[1][0] = axe.x*axe.y*(1-cs)+sn*axe.z; rt->c[1][1] = axe.y*axe.y+cs*(1-axe.y*axe.y); rt->c[1][2] = axe.y*axe.z*(1-cs)-sn*axe.x; rt->c[2][0] = axe.x*axe.z*(1-cs)-sn*axe.y; rt->c[2][1] = axe.y*axe.z*(1-cs)+sn*axe.x; rt->c[2][2] = axe.z*axe.z+cs*(1-axe.z*axe.z); } /* Construit la rotation d'angle alpha degres */ /* autour de l'axe (ax,ay,az) passant */ /* par l'origine */ Rt3D::Rt3D(float alpha,float ax,float ay,float az):TG3D() { Dir3D axe(ax,ay,az); initialisation(this,alpha,&axe); } /* Construit la rotation d'angle alpha degres */ /* autour de l'axe de direction d passant */ /* par l'origine */ Rt3D::Rt3D(float alpha,Dir3D *d):TG3D() { initialisation(this,alpha,d); } /* Construit le clone de la rotation rt */ Rt3D::Rt3D(Rt3D *rt):TG3D(rt) { } /* Destructeur */ Rt3D::~Rt3D(void) { }