/* Mathematiques de l'informatique graphique */ /* Rotation 3D en coordonnees homogenes */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Mars 2019 */ #include #include #include #include "TG3D.h" #include "Rt3D.h" #include "Dir3D.h" #ifndef M_PI #define M_PI 3.14159 #endif /* Constructeurs */ Rt3D::Rt3D(void):TG3D() { } static void initialisation(Rt3D *rt,double alpha,Dir3D *d) { Dir3D axe(d); axe.normalisation(); double aa = alpha/180.0*M_PI; double sn = sin(aa); double cs = 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); } Rt3D::Rt3D(double alpha,double ax,double ay,double az):TG3D() { initialisation(this,alpha,&Dir3D(ax,ay,az)); } Rt3D::Rt3D(double alpha,Dir3D *d):TG3D() { initialisation(this,alpha,d); } Rt3D::Rt3D(Rt3D *rt):TG3D(rt) { } /* Destructeur */ Rt3D::~Rt3D(void) { }