对一个点进行旋转加平移的操作。
旋转矩阵:
这个是逆时针的
扩展到三维:
顺时针的话将正数角度变成负数角度即可得到。
代码:
#include<cmath>
#include<Eigen/Core>
#include<Eigen/Dense>
#include<iostream>
int main() {
/* 给定一个点P = (2, 1), 将该点绕原点先逆时针旋转45◦,再平移(1, 2), 计算出
变换后点的坐标(要求用齐次坐标进行计算*/
vector definition
Eigen::Vector3f v(2.0f, 1.0f, 1.0f), point;
// vector output
std::cout << "example of output \n";
std::cout << v << std::endl;
Eigen::Matrix3f rotation;
Eigen::Matrix3f translation;//定义旋转和平移矩阵
double theta = (45.0 / 180.0) * 3.14;
translation << 1.0, 0.0, 1.0,
0.0, 1.0, 2.0,
0.0, 0.0, 1.0;
rotation << cos(theta), -1*sin(theta), 0.0,
sin(theta), cos(theta), 0.0,
0.0, 0.0, 1.0;
//两个向量表达式类型不兼容(相同的固定大小或动态大小
std::cout << rotation << std::endl;
v = translation * rotation * v ;
std::cout << v[0] << std::endl;
std::cout << v[1] << std::endl;
std::cout << v[2];
return 0;
}