/* Mathematiques de l'informatique graphique */ /* Rotation 3D */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Octobre 2010 */ #include #include #include #include "TransformationGeometrique.h" #include "Rotation.h" #include "Direction3D.h" #ifndef M_PI #define M_PI 3.14159 #endif Rotation::Rotation(void):TransformationGeometrique() { } Rotation::Rotation(double angle,double ax,double ay,double az):TransformationGeometrique() { Direction3D v(ax,ay,az); v.normalise(); double aa = angle/180.0*M_PI; float sn =(float) sin(aa); float cs =(float) cos(aa); c[0][0] = v.c[0]*v.c[0]+cs*(1-v.c[0]*v.c[0]); c[0][1] = v.c[0]*v.c[1]*(1-cs)-sn*v.c[2]; c[0][2] = v.c[0]*v.c[2]*(1-cs)+sn*v.c[1]; c[1][0] = v.c[0]*v.c[1]*(1-cs)+sn*v.c[2]; c[1][1] = v.c[1]*v.c[1]+cs*(1-v.c[1]*v.c[1]); c[1][2] = v.c[1]*v.c[2]*(1-cs)-sn*v.c[0]; c[2][0] = v.c[0]*v.c[2]*(1-cs)-sn*v.c[1]; c[2][1] = v.c[1]*v.c[2]*(1-cs)+sn*v.c[0]; c[2][2] = v.c[2]*v.c[2]+cs*(1-v.c[2]*v.c[2]); } Rotation::~Rotation(void) { }