【Games101-0】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


作业描述

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


$$$$

一、题解

公式
( x ′ y ′ 1 ) = ( cos ⁡ θ − sin ⁡ θ 1 sin ⁡ θ cos ⁡ θ 2 0 0 1 ) ⋅ ( 2 1 1 ) \left(\begin{matrix}x' \\ y' \\ 1 \end{matrix}\right)=\left(\begin{matrix}\cos{\theta} & -\sin{\theta} & 1 \\ \sin{\theta} & \cos{\theta} & 2 \\0 & 0 & 1\end{matrix}\right) \cdot \left(\begin{matrix}2 \\ 1 \\ 1 \end{matrix}\right) xy1=cosθsinθ0sinθcosθ0121211
其中 θ = 4 5 ∘ {\theta}=45^\circ θ=45角。

二、C++

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

using namespace std;

int main()
{
    Eigen::Vector3f point(2.0, 1.0, 1.0);       // 定义向量
    Eigen::Matrix3f transform1, transtorm3;     //定义矩阵
    float r = sqrt(2) / 2;                      // cos45 sin45 都是sqrt(2)/2
    transform1 << r, -r, 1.0, r, r, 2.0, 0.0, 0.0, 1.0;
    Eigen::Vector3f pointCur = transform1 * point;
    cout << pointCur;
    
    return 0;
}


笔记

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值