GAMES101 作业0

作业描述

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

思路

首先定义点坐标P(2,1,1),第三维的1表示P为点,当第三维为0的时候表示为向量,之后定义旋转角度angle,将角度转换为弧度,因为Eigen库的旋转矩阵需要使用弧度作为输出。使用Eigen::Matrix3d分别定义旋转矩阵和平移矩阵,(旋转矩阵使用rotation << cos(angle), -sin(angle), 0, sin(angle), cos(angle), 0, 0, 0, 1;初始化表示绕原点旋转,平移矩阵使用translation << 1, 0, 1, 0, 1, 2, 0, 0, 1;初始化表示沿 x 方向平移 1 个单位,沿 y 方向平移 2 个单位)之后讲旋转矩阵和平移矩阵相乘,将其作用于点P,通过Eigen::Vector3d transformed_P = translation * rotation * P;实现这一点,先将点 P 应用旋转矩阵,然后再应用平移矩阵。最后得到点的坐标。

作业代码如下

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


int main() {
    // 定义点 P 的坐标
    Eigen::Vector3d P(2, 1, 1);
    double M_PI = acos(-1);
    // 定义旋转角度(弧度)
    double angle = 45.0 * M_PI / 180.0;

    // 定义旋转矩阵
    Eigen::Matrix3d rotation;
    rotation << cos(angle), -sin(angle), 0,
                sin(angle), cos(angle), 0,
                0, 0, 1;

    // 定义平移矩阵
    Eigen::Matrix3d translation;
    translation << 1, 0, 1,
                   0, 1, 2,
                   0, 0, 1;

    // 应用旋转和平移变换
    Eigen::Vector3d transformed_P = translation * rotation * P;

    // 输出变换后的坐标
    std::cout << transformed_P << std::endl;

    return 0;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值