提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
作业描述
给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)
$$$$
一、题解
公式
(
x
′
y
′
1
)
=
(
cos
θ
−
sin
θ
1
sin
θ
cos
θ
2
0
0
1
)
⋅
(
2
1
1
)
\left(\begin{matrix}x' \\ y' \\ 1 \end{matrix}\right)=\left(\begin{matrix}\cos{\theta} & -\sin{\theta} & 1 \\ \sin{\theta} & \cos{\theta} & 2 \\0 & 0 & 1\end{matrix}\right) \cdot \left(\begin{matrix}2 \\ 1 \\ 1 \end{matrix}\right)
⎝⎛x′y′1⎠⎞=⎝⎛cosθsinθ0−sinθcosθ0121⎠⎞⋅⎝⎛211⎠⎞
其中
θ
=
4
5
∘
{\theta}=45^\circ
θ=45∘角。
二、C++
#include <cmath>
#include "Eigen/Core"
#include "Eigen/Dense"
#include <iostream>
using namespace std;
int main()
{
Eigen::Vector3f point(2.0, 1.0, 1.0); // 定义向量
Eigen::Matrix3f transform1, transtorm3; //定义矩阵
float r = sqrt(2) / 2; // cos45 sin45 都是sqrt(2)/2
transform1 << r, -r, 1.0, r, r, 2.0, 0.0, 0.0, 1.0;
Eigen::Vector3f pointCur = transform1 * point;
cout << pointCur;
return 0;
}