GAMES101---作业0

这一系列博客主要是为了记录自己对GAMES101课程的作业完成情况.

作业0: 虚拟机的使用

环境配置

本系列博客没有使用老师提供的虚拟机, 而采用的是WSL的方式.

(注: 由于WSL我平常有在用, 也不需要重新配置. 至于老师这个环境的要求, 大家可以google下相应的教程, 就不在贴出配置过程了)


作业描述

给定一个点 P = (2, 1), 将该点绕原点先逆时针旋转45°, 再平移(1, 2), 计算出变换后点的坐标(要求使用齐次坐标计算)


解答

按照老师课上给出的公式计算即可, 公式如下图. 然后按顺序左乘.

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void task0(){

Eigen::Vector2f p(2.0, 1.0);
Eigen::Vector3f newP(p(0), p(1), 1);
Eigen::Matrix3f rotationMatrix, transformMatrix;
// 旋转矩阵
rotationMatrix << std::cos(45.0/180.0*acos(-1)), -1.0 * std::sin(45.0/180.0*acos(-1)), 0.0,
std::sin(45.0/180.0*acos(-1)), std::cos(45.0/180.0*acos(-1)) , 0.0,
0.0 , 0.0 , 1.0;
// 平移矩阵
transformMatrix << 1.0, 0.0, 1.0,
0.0, 1.0, 2.0,
0.0, 0.0, 1.0;
std::cout << "rotationMatrix:" << std::endl;
std::cout << rotationMatrix << std::endl;

std::cout << "transformMatrix:" << std::endl;
std::cout << transformMatrix << std::endl;

// 绕原点逆时针旋转45°
newP = rotationMatrix * newP;
std::cout << "-------------------" << std::endl;
std::cout << newP << std::endl;

// 平移(1, 2)
newP = transformMatrix * newP;
std::cout << "-------------------" << std::endl;
std::cout << newP << std::endl;


p(0) = newP(0);
p(1) = newP(1);
std::cout << "转换后的点的坐标 : " << std:: endl;
std::cout << p << std::endl;
}