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

本文分享了作者在配置开发环境(Linux与Windows)及使用Eigen库进行矩阵、向量操作的心得,包括环境搭建难题、代码示例和矩阵运算技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

这一节的作业主要是为了引导大家配置环境,并学习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<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream>

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 <<std::endl;
    // matrix scalar multiply i * 2.0
    std::cout << "Example of scalar multiply \n";
    std::cout << i * 2.0f << std:: endl;
    // matrix multiply i * j
    std::cout << "Example of matrix multiply \n";
    std::cout << i*j << std::endl;
    // matrix multiply vector i * v
    std::cout << "Example of matrix multiply vector \n";
    std::cout << i*v <<std::endl;
    return 0;
}

第二部分:

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

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<<"旋转矩阵"<<std::endl;
            std::cout<<rou<<std::endl;
            std::cout<<"被操作向量"<<std::endl;
            std::cout<<p<<std::endl;
            std::cout<<"乘积结果"<<std::endl;
            std::cout<<q<<std::endl;
            return 0;

}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值