Quick Notes

首先,编写好本次作业的程序 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;
}