Games101 作业0 记录

本文介绍了如何在Windows环境下使用C++和Eigen库进行基础编程,并通过实例演示了如何对点进行逆时针旋转和平移操作。从准备环境到使用CMake编译,再到利用Eigen进行向量和矩阵运算,最后完成一个实际的点变换作业。

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

准备环境

使用C++

基本使用

// main.cpp
#include<cmath>
#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;
    
    return 0;
}

使用CMake编译

配置文件

// CMakeLists.txt
cmake_minimum_required (VERSION 2.8.11)
project (Transformation)

find_package (Eigen3 REQUIRED)
include_directories (EIGEN3_INCLUDE_DIR)

add_executable (Transformation main.cpp)

编译步骤

$ mkdir build && cd build # 在main.cpp所在目录创建build目录
$ cmake ..
$ make                    # 编译程序
$ ./Transformation        # 运行程序

使用Eigen

  • Eigen:一个线性代数运算库

基本使用

#include<cmath>
#include<iostream>
// 引入 eigen
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>

int main(){
    // 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
    std::cout << i + j << std::endl;
    // matrix scalar multiply i * 2.0
    std::cout << i * 2.0 << std::endl;
    // matrix multiply i * j
    std::cout << i * j << std::endl;
    // matrix multiply vector i * v
    std::cout << i * v << std::endl;

    return 0;
}

完成作业

描述

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

实现

#include<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream>

int main(){
    // Point definition
    Eigen::Vector3f p(2.0,1.0,1.0);
    // Matrix definition
    Eigen::Matrix3f RotateMatrix,TranslateMatrix;
    TranslateMatrix << 1.0, 0.0, 1.0,
                       0.0, 1.0, 2.0,
                       0.0, 0.0, 1.0;
    float cos45 = std::cos(45),
          sin45 = std::sin(45);
    RotateMatrix << cos45, -1.0*sin45, 0.0,
                    sin45,      cos45, 0.0,
                      0.0,        0.0, 1.0;
    std::cout << (TranslateMatrix * RotateMatrix * p) / 1.0 << std::endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值