作业描述:
给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45°,再平移 (1,2),计算出
变换后点的坐标(要求用齐次坐标进行计算).
*想进行线性运算需要利用齐次坐标的性质
第一步:
根据作业要求设立点 P(2,1)
*默认点或向量为列向量
Eigen::Vector3f p(2.0f, 1.0f, 1.0f);
第二步:
构建3*3旋转矩阵 r
旋转矩阵的推理:
令点A(1,0)逆时针旋转,则
(cos(
),sin(
)),令B(0,1)逆时针旋
,则
(-sin(
),cos(
)).
综上所述,我们可以推测对于任意一个点m(x,y)旋转,
可得为(x*(cos(
)-sin(
)), y*(sin(
)+cos(
))).
令2*2旋转矩阵r为(cos(), -sin(
), sin(
), cos(
))
可得 = r * m
Eigen::Matrix3f r;//acos为反余弦函数
r << cos(45.0/180.0*acos(-1)), -sin(45.0/180.0*acos(-1)), 0.0,
sin(45.0/180.0*acos(-1)), cos(45.0/180.0*acos(-1)), 0.0,
0.0, 0.0, 1.0;
第三步:
构建3*3平移矩阵m
Eigen::Matrix3f m;
m << 1.0, 0.0, 1.0,
0.0, 1.0, 2.0,
0.0, 0.0, 1.0;
第四步:
进行线性运算
std::cout << m * r * p << std::endl;
//*相乘的顺序不可变
//m*r*p=(m*r)*p=m*(r*p)