GAMES101 | 作业0


1.环境配置相关问题

出现了共享粘贴板双向失效的情况,解决方案参考这个博客
VirtualBox安装增强功能后共享剪贴板失效——解决方案
VBoxGuestAdditions_6.1.2.iso

2.作业

1.作业描述

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

2.分析实现

运用齐次坐标中点的表示方法,构造变换矩阵,相乘并输出。其中:

旋转变换Rotation

\[R(α)= \begin{bmatrix} cosα & -sinα & 0 \\ sinα & cosα & 0 \\ 0 & 0 & 1 \end{bmatrix} \]

平移变换Translation

\[T(t_x,t_y)= \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \]

tips:

顶点和向量在齐次坐标下表示不同,顶点第三项为1,向量第三项为0。
顶点坐标左乘变换矩阵的顺序,后进行的变换在左。

代码

#include
#include
#include
#include

int main(){
    Eigen::Vector3f v(2.0f,1.0f,1.0f);
    float cosa = sin(45.0/180.0*acos(-1));
    float sina = sin(45.0/180.0*acos(-1));
    Eigen::Matrix3f r,t;
    r << cosa, -sina, 0.0, sina, cosa, 0.0, 0.0, 0.0, 1.0;
    t << 1.0, 0.0, 1.0, 0.0, 1.0, 2.0, 0.0, 0.0, 1.0;
    std::cout << t*r*v << std::endl;
    return 0;
}
输出
1.70711
4.12132
1

是一个熟悉环境的简单作业,但是,配环境解决问题很头秃TAT