Quick Notes
- C++手册
- Eigen库官方文档的矩阵部分
- C++三角函数运算使用弧度制
- 使用 cmake 进行编译。
首先,编写好本次作业的程序 main.cpp。 然后, 在 main.cpp 所在目录下,打开终端 (命令行),依次输入:
- mkdir build: 创建名为 build 的文件夹。
- cd build: 移动到 build 文件夹下。
- cmake ..: 注意其中’..’ 表示上一级目录,若为’.’ 则表示当前目录。
- make: 编译程序,错误提示会显示在终端中。
- ./Transformation:若上一步无错误,则可运行程序 (这里的 Transformation 为可执行文件名,可参照 CMakeLists.txt 中修改)。
作业描述
给定一个点 P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移 (1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)。
解题思路
先旋转,后平移,题目要求用其次坐标进行计算,先算出仿射矩阵再与之相乘。
代码实现
#include<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream>
int main(){
Eigen::Vector3d P(2.0, 1.0, 1.0);
std::cout << " Define point P: \n" << P << std::endl;
Eigen::Matrix3d rotation;
Eigen::Matrix3d translation;
Eigen::Matrix3d M;
double angle = 45.0 / 180.0 * M_PI;
rotation << cos(angle), -sin(angle), 0,
sin(angle), cos(angle), 0,
0, 0, 1;
translation << 1, 0, 1,
0, 1, 2,
0, 0, 1;
M << translation * rotation;
std::cout << " Define rotation matrix M: \n" << M << std::endl;
P = M * P;
std::cout << " P[" << P[0] << "," << P[1] << "]\n" << std::endl;
return 0;
}