Game101 作业1

对一个点进行旋转加平移的操作。

旋转矩阵:

这个是逆时针的

 

扩展到三维:

 

顺时针的话将正数角度变成负数角度即可得到。

代码:

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

int main() {
   /* 给定一个点P = (2, 1), 将该点绕原点先逆时针旋转45◦,再平移(1, 2), 计算出
        变换后点的坐标(要求用齐次坐标进行计算*/
     vector definition
    Eigen::Vector3f v(2.0f, 1.0f, 1.0f), point;
    // vector output
    std::cout << "example of output \n";
    std::cout << v << std::endl;
    Eigen::Matrix3f rotation; 
    Eigen::Matrix3f translation;//定义旋转和平移矩阵

    double theta = (45.0 / 180.0) * 3.14;
    translation << 1.0, 0.0, 1.0, 
                    0.0, 1.0, 2.0, 
                    0.0, 0.0, 1.0;
    rotation << cos(theta), -1*sin(theta), 0.0,
               sin(theta), cos(theta), 0.0, 
                0.0, 0.0, 1.0;
     
    //两个向量表达式类型不兼容(相同的固定大小或动态大小
    std::cout << rotation << std::endl;
    v = translation * rotation * v ;
    std::cout << v[0] << std::endl;
    std::cout << v[1] << std::endl;
    std::cout << v[2];

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值