Games101 作业0

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

*想进行线性运算需要利用齐次坐标的性质

第一步:

根据作业要求设立点 P(2,1)

*默认点或向量为列向量

Eigen::Vector3f p(2.0f, 1.0f, 1.0f);

第二步:

构建3*3旋转矩阵 r

旋转矩阵的推理:

令点A(1,0)逆时针旋转\alpha,则\displaystyle {A}'(cos(\alpha),sin(\alpha​​​​​​​)),令B(0,1)逆时针旋\alpha,则{A}'(-sin(\alpha),cos(\alpha)).

综上所述,我们可以推测对于任意一个点m(x,y)旋转\alpha,

可得{m}'为(x*(cos(\alpha​​​​​​​)-sin(\alpha​​​​​​​)), y*(sin(\alpha​​​​​​​)+cos(\alpha))).

令2*2旋转矩阵r为(cos(\alpha), -sin(\alpha), sin(\alpha), cos(\alpha))

可得{m}' = r * m

 Eigen::Matrix3f r;//acos为反余弦函数
    r << cos(45.0/180.0*acos(-1)), -sin(45.0/180.0*acos(-1)), 0.0, 
        sin(45.0/180.0*acos(-1)), cos(45.0/180.0*acos(-1)), 0.0,
        0.0, 0.0, 1.0;

第三步:

构建3*3平移矩阵m

 Eigen::Matrix3f m;
    m << 1.0, 0.0, 1.0,
        0.0, 1.0, 2.0,
        0.0, 0.0, 1.0;

第四步:

进行线性运算

std::cout << m * r * p << std::endl;
//*相乘的顺序不可变
//m*r*p=(m*r)*p=m*(r*p)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值