给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出
变换后点的坐标(要求用齐次坐标进行计算)。
首先我们知道弧度是计算方式
rad = angle * 圆周率 / 180
`X' = cos(rad) x + -sin(rad) y;
Y' = sin(rad) x + cos(rad) y`


矩阵写作
cos(rad), -sin(rad),
sin(rad), cos(rad),齐次坐标
cos(rad), -sin(rad),tr.x
sin(rad), cos(rad),tr.y
0 , 0 ,1先去图形计算器算下结果方便验证
干上代码,方便理解直接中文变量了
要注意 C++ 自身不支持 float234( 这点搞死我了)
#include <cmath>
#include <iostream>
#include <Eigen/Dense>
#define MY_PI 3.14159265358979323846
using namespace std;
using namespace Eigen;
int main()
{
// 给定位置;
Vector3f P(2.0, 1.0, 1.0);
cout << P << endl;
// 平移位置;
Vector3f T(1.0, 2.0, 0.0);
// 角度转为弧度 , 计算弧度的 cos 与 sin;
//double M_PI(EIGEN_PI);
//cout << M_PI << endl;
float 角度 (45.0);
float 弧度 (角度 * MY_PI / 180.0);
float cos 弧度 = cos(弧度 );
float sin 弧度 = sin(弧度 );
cout << "弧度 :";
cout << 弧度 << endl;
cout << "cos 弧度 :";
cout << cos 弧度 << endl;
cout << "sin 弧度 :";
cout << sin 弧度 << endl;
Matrix3f R;
R << cos 弧度, -sin 弧度, T.x(),
sin 弧度, cos 弧度, T.y(),
0.0, 0.0, 1.0 ;
// 进行旋转矩阵;
Vector3f RP(R * P);
cout <<" 旋转平移后的位置 :" << endl;
cout << RP << endl;
return 0;
}
最后结果
