games101-作业0

作业题目

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

题解

首先复习下旋转矩阵
注意题目中要求使用齐次坐标
故P(2,1)的齐次坐标为(2,1,1)
由于使用了齐次坐标,旋转和平移矩阵可以合二为一了。
注意:先旋转,后平移
p ′ = [ 1 0 Δ x 0 1 Δ y 0 0 1 ] ∗ [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] ∗ [ x y 1 ] = [ c o s θ − s i n θ Δ x s i n θ c o s θ Δ y 0 0 1 ] ∗ [ x y 1 ] = [ 1.70711 4.12132 1 ] p'=\begin{bmatrix} 1 & 0 & \Delta x \\ 0 & 1 & \Delta y \\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta & \Delta x \\ sin\theta & cos\theta & \Delta y \\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}= \begin{bmatrix} 1.70711 \\ 4.12132 \\ 1 \end{bmatrix} p= 100010ΔxΔy1 cosθsinθ0sinθcosθ0001 xy1 = cosθsinθ0sinθcosθ0ΔxΔy1 xy1 = 1.707114.121321

代码

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

#define PI 3.1415926f
#define DEG2RAD (PI/180.0f)

int main(){
    Eigen::Vector3f point(2.0f,1.0f,1.0f);
    float rad = 45.0f * DEG2RAD;
    Eigen::Matrix3f rotateMat;
    rotateMat << 
        cos(rad), -sin(rad), 1.0,
        sin(rad), cos(rad), 2.0,
        0.0, 0.0, 1.0;

    point = rotateMat * point;
    std::cout << point << std::endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhh-cy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值