chai3d中通过计算旋转轴和角度来获得旋转矩阵Matrix3
[cpp]view plaincopyinlineboolrotateAboutLocalAxisRad(constcVector3d&a_axis, constdouble&a_angleRad) { //computelengthofaxisvector doublelength=a_axis.length(); //checklengthofaxisvector if(length<C_TINY) { //rotationmatrixcouldnotbecomputedbecauseaxisvectorisnotdefined return(false); } //normalizeaxisvector doublef=1.0/length; doublex=f*a_axis(0); doubley=f*a_axis(1); doublez=f*a_axis(2); //computerotationmatrix doublec=::cos(a_angleRad); doubles=::sin(a_angleRad); doublev=1-c; cMatrix3dm; m(0,0)=x*x*v+c;m(0,1)=x*y*v-z*s;m(0,2)=x*z*v+y*s; m(1,0)=x*y*v+z*s;m(1,1)=y*y*v+c;m(1,2)=y*z*v-x*s; m(2,0)=x*z*v-y*s;m(2,1)=y*z*v+x*s;m(2,2)=z*z*v+c; (*this)=(*this)*m; //returnsuccess return(true); }
上面的函数中的绕任意轴旋转获得的旋转矩阵的算法实现思路如下:
根据Goldman给出的公式进行计算,这个公式有点复杂:
具体推导过程可以参考:
/lovedday/archive//01/12/41031.html
/cg_ghost/archive//04/27/2473347.html