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

作业解答:

#include<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream> int main(){
   // define point in Homogeneous Coordinates
Eigen::Vector3f res(2.0f, 1.0f, 1.0f);
// define Affine Transformations Matrix
// Translate then Rotate
Eigen::Matrix3f Rota_aff;
Rota_aff << cos(45.0/180.0*acos(-1)), -sin(45.0/180.0*acos(-1)), 0,
sin(45.0/180.0*acos(-1)), cos(45.0/180.0*acos(-1)), 0,
0, 0, 1;
Eigen::Matrix3f Tran_aff;
Tran_aff << 1.0, 0.0, 1.0,
0.0, 1.0, 2.0,
0.0, 0.0, 1.0;
std::cout << Tran_aff*Rota_aff*res << std::endl;
return 0;
}

作业解析:二维点的齐次坐标表示可以用三维向量概况(即最后一位为1),然后使用先旋转再平移的规则将二维坐标点依次左乘旋转矩阵和平移矩阵。

       此外旋转矩阵(逆时针旋转a度)即 m3(cosa, -sina, 0)(sina, cosa, 0)(0, 0, 1),平移矩阵(沿x轴平移a,沿y轴平移b)即 m3(1, 0, a)(0, 1, b)(0, 0, 1)。

注:如示例代码,在进行点位运算时尽量使用float,此外sin与cos函数的传入值需为弧度,弧度45度即为45.0/180.0*acos(-1)   公式为:弧度 = 角度 / 180 * pi

随机推荐

  1. 面试官:JDK中都用了哪些设计模式?

    设计模式是前辈们经过实践验证总结的解决方案,帮助我们构建出更具可维护性.可扩展性和可读性的代码.当然,在面试的过程中,也会或多或少的被问到.那么今天,我们就来看一道设计模式中的常见面试问题:JDK 中 ...

  2. csv导入导出组件jcsv

    jcsv 介绍 jcsv一个简单的.轻量级的csv导入.导出库,相对于opencsv与javacsv,jcsv侧重于导入导出,包括导入校验.导出模板等. 源代码地址:https://gitee.com ...

  3. CF Pinely Round 4

    https://codeforces.com/contest/1991 \(-122=2019\) D \(1,3,4,6\) 构成团,所以答案下界为 \(4\) 按模 \(4\) 染色.同色的二进制 ...

  4. VS常用拓展以及快捷键

    VS常用拓展以及快捷键 扩展1:Select Next Occurrence 该拓展可以当前目标.下一个目标.上一个目标,类似于Alt+鼠标拖动,但是可以在没对齐的情况下使用 安装 设置4个常用的快捷 ...

  5. 使用 setResponseStatus 函数设置响应状态码

    title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通 ...

  6. MySQL的索引原理及使用

    MySQL中的索引模型 Mysql中的索引使用的数据结构一般为搜索树,这里的搜索树,一般使用B树,这里补一下数据结构中的B树结构:说B树之前,先顺一个前置的知识点,平衡二叉树: 平衡二叉树 二叉树应该 ...

  7. in notin exists not exists 性能优化算法总结

    in notin exists not exists 性能优化算法总结 1.1. in 和 exists 区别 1.2. not in 能不能走索引 1.3. not in 和 join 的关系 1. ...

  8. sql语句去掉前面的0(前导零,零前缀)

    sql还有个stuff的函数,很强悍. 一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就 ...

  9. ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本

    ​ 2019年8月,华为在开发者大会上正式发布鸿蒙系统. HarmonyOS 鸿蒙系统是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在 ...

  10. Azure 入门系列 (第三篇 Publish Web Application to VM)

    本系列 这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能. 一共 6 篇 1. Virtual Machine (VM) ...