GAMES101 作业0

跟着官方教程使用了虚拟机,Eigen: Matrix and vector arithmetic ,使用 cmake 进行编译

GAMES101 现代计算机图形学入门 官方教程  作业0发布公告 – 计算机图形学与混合现实在线平台 (games-cn.org)

虚拟机安装

超级详细的 VirtualBox 虚拟机安装 及入门教程-CSDN博客

代码框架

#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;

    // 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
    // matrix scalar multiply i * 2.0
    // matrix multiply i * j
    // matrix multiply vector i * v

    return 0;
}
头文件

在 Eigen 库中,#include<eigen3/Eigen/Core>#include<eigen3/Eigen/Dense> 都用于引入库的不同部分,但它们所包含的内容和用途有所不同。

  1. #include<eigen3/Eigen/Core>

    • 这个指令引入了 Eigen 库的核心模块,它包括了进行线性代数计算所必需的基本组件。
    • 核心模块定义了矩阵和向量的类(例如 Eigen::Matrix 和 Eigen::Vector),以及一些基本的线性代数运算,如加法、减法、标量乘法、转置等。
    • 它还包含了 Eigen 的大部分数据类型和基础功能,但并不包括对特定矩阵分解或更高级运算的支持。
    • Eigen/Core 是 Eigen 库中其他模块的基石,通常作为其他模块的依赖。
  2. #include<eigen3/Eigen/Dense>

    • 这个指令引入了 Eigen 库中处理密集矩阵和数组的模块。
    • Eigen/Dense 模块依赖于 Eigen/Core,因此它包含了核心模块的所有功能,并且还扩展了对密集矩阵和向量的支持,包括更复杂的线性代数运算,如矩阵乘法、求逆、分解(LU、Cholesky、QR、SVD 等)。
    • 这个模块提供了对动态大小和固定大小矩阵的支持,以及对各种数学运算和函数的广泛覆盖。
    • Eigen/Dense 是进行大多数线性代数计算时最常用的模块,特别是当你需要进行矩阵分解或其他高级操作时。

总结来说,Eigen/Core 提供了 Eigen 的基础功能,而 Eigen/Dense 在此基础上增加了对密集矩阵和向量操作的全面支持。在大多数情况下,如果你需要进行矩阵运算,你可能会直接包含 Eigen/Dense,因为它已经包含了 Eigen/Core 的所有内容。如果你的项目只需要使用 Eigen 的一小部分功能,或者你想要减小编译时的依赖和大小,你可以选择只包含 Eigen/Core

使用 cmake 进行编译

CMake 是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程文件。以下是使用 CMake 进行编译的一般步骤:

  1. 编写 CMakeLists.txt 文件:这是 CMake 项目的配置文件,它定义了项目的构建规则和目标。

  2. 创建构建目录:为了保持源代码目录的干净,通常会创建一个单独的构建目录。

  3. 运行 CMake:在构建目录中运行 CMake 来生成构建系统。

  4. 编译项目:使用生成的构建系统来编译项目。

下面是这些步骤的详细说明:

步骤 1: 编写 CMakeLists.txt 文件

在你的项目根目录中创建一个 CMakeLists.txt 文件,这个文件包含了构建项目的指令。例如:

cmake

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

# 添加可执行文件
add_executable(MyProject main.cpp)
步骤 2: 创建构建目录

在你的项目根目录下创建一个构建目录,通常命名为 build

bash

mkdir build
cd build
步骤 3: 运行 CMake

在构建目录中运行 CMake,指定源代码目录:

bash

cmake ..

这个命令会根据 CMakeLists.txt 文件生成适合你系统的构建文件。如果你使用的是 Unix 系统,它会生成 Makefile;如果你使用的是 Windows,它会生成 Visual Studio 解决方案文件。

步骤 4: 编译项目

使用生成的构建系统来编译项目:

  • 对于 Unix 系统

    bash

    make

    这将使用 make 工具来编译项目。

  • 对于 Windows 系统

    如果你生成的是 Visual Studio 解决方案文件,你可以打开 .sln 文件并使用 Visual Studio 来编译项目。或者,如果你使用的是 Ninja 或其他生成器,你可以使用相应的命令来编译项目。

其他

"Bash" 是 "Bourne Again SHell" 的缩写,它是一种广泛使用的 Unix shell 和命令语言。Bash 是 GNU 操作系统的一部分,用于与操作系统交互,控制程序执行,以及自动化任务。它是由 Brian Fox 为 GNU 项目编写的,作为对传统 Bourne shell(sh)的改进。

Bash 具有以下特点:

  1. 命令解释执行:Bash 读取命令行输入,解释命令,然后执行它们。
  2. 脚本编程:Bash 支持脚本编程,允许用户编写包含多个命令的脚本文件,这些脚本可以自动化复杂的任务。
  3. 命令历史:Bash 保存用户输入的命令历史,允许用户通过历史记录快速重复或修改以前的命令。
  4. 命令别名:用户可以为常用的命令序列创建别名,简化日常操作。
  5. 管道和重定向:Bash 支持管道(|)和输入/输出重定向,允许用户将一个命令的输出作为另一个命令的输入,以及控制输出到文件或从文件中读取输入。
  6. 环境变量:Bash 允许用户设置和管理环境变量,这些变量可以影响程序的行为。
  7. 强大的文本处理:Bash 内置了许多文本处理工具,如 echogrepsedawk 等。

Bash 是大多数 Linux 发行版和 macOS 系统的默认 shell,它也是许多系统管理员和程序员的首选 shell。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值