借鉴了大佬的推导过程完成了作业,推导思路其实和推导透视投影矩阵差不多,https://www.cnblogs.com/graphics/archive/2012/08/10/2627458.html
C++实现
constexpr double MY_PI = 3.1415926;
Eigen::Matrix4f get_rotation(Vector3f axis,float angle){
Eigen::Matrix4f rotating = Eigen::Matrix4f::Identity();
float ra=angle/180*MY_PI;
float x=axis.x();
float y=axis.y();
float z=axis.z();
float cos_angle=std::cos(ra);
float sin_angle=std::sin(ra);
rotating<< x*x+(1-x*x)*cos_angle,x*y*(1-cos_angle)+z*sin_angle,
x*z*(1-cos_angle)-y*sin_angle,0,\
x*y*(1-cos_angle)-z*sin_angle,y*y+(1-y*y)*cos_angle,
y*z*(1-cos_angle)+x*sin_angle,0,\
x*z*(1-cos_angle)+y*sin_angle,y*z*(1-cos_angle)-x*sin_angle,
z*z+(1-z*z)*cos_angle,0,\
0,0,0,1;
return rotating;
}