三维向量旋转

【求助】三维向量旋转
最近在做个3D的东西,需要用到向量旋转,已经知道向量A和向量B的坐标,怎么求向量A绕向量B旋转X角度后得到的向量坐标

------解决方案--------------------
数学问题
A (a1,a2)
向量b=(a1cosX,a2sinX) 
------解决方案--------------------
知道转轴是vecB,角度是x
根据计算几何知识构造旋转矩阵R
然后R*A就是A绕B旋转x后的向量
至于旋转矩阵R的构造,请搜索: 罗德里格公式(Rodrigues' formula)
------解决方案--------------------
baidu 四元数 会有很多实现,其中有与下面类似的代码

矩阵*向量-->新向量

//绕某方向旋转角度 矩阵
GCMatrix4D operator%( GCVector4D const & vecAxis, double fTheta )
{
fTheta = ( double )( fTheta/2.0 );

GCVector4D uvAxis = vecAxis.ToUnitVector();

double cosa = cos( fTheta );
double sina = sin( fTheta );

double a = uvAxis.X() * sina;
double b = uvAxis.Y() * sina;
double c = uvAxis.Z() * sina;

double Data00 = 1.0 - 2.0*( b*b + c*c );
double Data11 = 1.0 - 2.0*( c*c + a*a );
double Data22 = 1.0 - 2.0*( a*a + b*b );

double Data01 = 2.0 * ( a*b - c*cosa );
double Data02 = 2.0 * ( a*c + b*cosa );

double Data10 = 2.0 * ( a*b + c*cosa );
double Data12 = 2.0 * ( b*c - a*cosa );

double Data20 = 2.0 * ( a*c - b*cosa );
double Data21 = 2.0 * ( b*c + a*cosa );

return GCMatrix4D( GCVector4D( Data00, Data10, Data20),
GCVector4D( Data01, Data11, Data21),
GCVector4D( Data02, Data12, Data22),
GCVector4D( 0,0,0,1)
);
}