题目
给定一个点 P = ( 2 , 1 ) P=(2,1) P=(2,1),将该点绕原点先逆时针旋转 4 5 ∘ 45^{\circ} 45∘,再平移 ( 1 , 2 ) (1,2) (1,2),计算出变换后点的坐标(要求用齐次坐标进行计算)。
代码
#include <cmath>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
#include <iostream>
int main() {
Eigen::Vector3f p(2.0, 1.0, 1.0), p1;
Eigen::Matrix3f rotate, translate;
float alpha = 45.0 / 180.0 * std::acos(-1.0);
rotate << std::cos(alpha), -std::sin(alpha), 0.0,
std::sin(alpha), std::cos(alpha), 0.0,
0.0, 0.0, 1.0;
translate << 1.0, 0.0, 1.0,
0.0, 1.0, 2.0,
0.0, 0.0, 1.0;
p1 = translate * rotate * p;
std::cout << '(' << p1[0] << ',' << p1[1] << ')' << std::endl;
return 0;
}
运行结果:
(1.70711,4.12132)