Games101环境配置和作业答案:pa0

引言

这一节的作业主要是为了引导大家配置环境,并学习Eigen库的矩阵、向量等操作。本篇帖子用来记录一下我的心路历程和最终代码。

环境配置

        ①先来说一下我在环境配置上吃的苦,我本身装有VMware虚拟机,内核用的是Ubuntu,考虑到Linux在搞开发上的优越性,我打算用这个完成图形学作业,但是真的太太太麻烦了!闫老师那边已经给了Virtual Box和内核,所以真正用Linux并且配置环境的帖子很少!比较有参考性的一个博主的博客我放在这里,该博主的配置时间比较新,对于以后还想尝试环境配置的同学应该会很有帮助:

pa0环境:

【GAMES101闫令琪图形学】作业0(配置开发环境)_hans774882968的博客-CSDN博客_games101 作业0

pa1环境:

【GAMES101闫令琪图形学】作业1(配置opencv4.5.4,并解决常见错误)_hans774882968的博客-CSDN博客

在Windows系统下的环境配置可参考:

https://zhuanlan.zhihu.com/p/259208999

        以上方法我都尝试过,Linux上的问题在于我在安装OpenCV(这属于pa1了)时,无法下载相关依赖包,下载总是报错说某些依赖包的依赖有错,反复百度无果,遂放弃;Windows上其实已经接近成功了,但是下载完Eigen、CMake、OpenCV之后无法再头文件正确引用(猜测是系统路径或者是VSCode的json文件没有配置好,我觉得后续有可能修复好)。在我走投无路之时,我寻思干脆就用老师的吧,大不了就是多点内存,下完——真香!求各位还在环境中挣扎的,牺牲空间换时间吧,真的很好用。这里给出对应的百度网盘,以及作业论坛中关于虚拟机相关问题的帖子:

链接:百度网盘 请输入提取码 密码:92c9

未压缩的虚拟机百度云链接发布公告 – 计算机图形学与混合现实研讨会

代码

第一部分:

关于 Matrix 的使用样例展示了如何定一个三维浮点矩阵进行输出,自行根据注释与 Vector 部分的经验探索矩阵加减、数乘、矩阵乘法、矩阵乘向量的用法

这部分理解向量和矩阵的计算方式即可写出,主要在于熟悉Eigen库,这里给出一个关于Eigen库许多操作的链接,以便后续学习:

Eigen学习(五)块操作_Fearless的博客-CSDN博客_eigen块操作

#include
#include
#include
#include

int main(){

    // Basic Example of cpp
    std::cout << "Example of cpp \n";
    float a = 1.0, b = 2.0;
    std::cout << a << std::endl;
    std::cout << a/b << std::endl;
    std::cout << std::sqrt(b) << std::endl;
    std::cout << std::acos(-1) << std::endl;
    std::cout << std::sin(30.0/180.0*acos(-1)) << std::endl;

    // Example of vector
    std::cout << "Example of vector \n";
    // vector definition
    Eigen::Vector3f v(1.0f,2.0f,3.0f);
    Eigen::Vector3f w(1.0f,0.0f,0.0f);
    // vector output
    std::cout << "Example of output \n";
    std::cout << v << std::endl;
    // vector add
    std::cout << "Example of add \n";
    std::cout << v + w << std::endl;
    // vector scalar multiply
    std::cout << "Example of scalar multiply \n";
    std::cout << v * 3.0f << std::endl;
    std::cout << 2.0f * v << std::endl;
    //vector dot product
    std::cout << "Example of dot product \n";
    std::cout << v.transpose()*w << std::endl;

    // Example of matrix
    std::cout << "Example of matrix \n";
    // matrix definition
    Eigen::Matrix3f i,j;
    i << 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0;
    j << 2.0, 3.0, 1.0, 4.0, 6.0, 5.0, 9.0, 7.0, 8.0;
    // matrix output
    std::cout << "Example of output \n";
    std::cout << i << std::endl;
    // matrix add i + j
    std::cout << "Example of matrix add \n";
    std::cout << i+j <

第二部分:

给定一个点 P =(2,1) , 将该点绕原点先逆时针旋转 45 ,再平移 (1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)。
这个代码只需按照齐次坐标的定义写出P的坐标,再写出变换矩阵即可:
#include
#include
#include
#include

int main(){
            Eigen::Vector3f p(2.0f,1.0f,1.0f);
            Eigen::Matrix3f rou;
            rou<< cos(45.0/180*acos(-1)),-sin(45.0/180*acos(-1)),1.0,
                  sin(45.0/180*acos(-1)),cos(45.0/180*acos(-1)),2.0,
                  0.0,0.0,1.0;
            Eigen::Vector3f q;
            q = rou*p;
            std::cout<<"旋转矩阵"<

你可能感兴趣的:(Games101,linux)