// 绕给定轴旋转向量,返回旋转后的向量 CVector3 CVector3::GetRotatedAxis(double angle, const CVector3 & axis) const { if(angle==0.0) return (*this); CVector3 u=axis.GetNormalized(); CVector3 result; float cosTheta = (float)cos(angle); float sinTheta = (float)sin(angle); result.x = (float)(cosTheta + (1 - cosTheta) * u.x * u.x) * x; result.x += (float)((1 - cosTheta) * u.x * u.y - u.z * sinTheta) * y; result.x += (float)((1 - cosTheta) * u.x * u.z + u.y * sinTheta) * z; result.y = (float)((1 - cosTheta) * u.x * u.y + u.z * sinTheta) * x; result.y += (float)(cosTheta + (1 - cosTheta) * u.y * u.y) * y; result.y += (float)((1 - cosTheta) * u.y * u.z - u.x * sinTheta) * z; result.z = (float)((1 - cosTheta) * u.x * u.z - u.y * sinTheta) * x; result.z += (float)((1 - cosTheta) * u.y * u.z + u.x * sinTheta) * y; result.z += (float)(cosTheta + (1 - cosTheta) * u.z * u.z) * z; return result; }