给定一个点 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. 1分钟掌握变速效果,让你的视频快慢自如----蓝松视频编辑SDK

       2. 变速调整默认速度是1X就是正常播放速度,可以通过调节滑块,实现视频中的慢镜头动作    3.只需一行代码设置播放速度/** 视频的播放速度; 范围是 0.1---10.0 默认1.0; 正 ...

  2. 强!34.1K star! 再见Postman,新一代API测试利器,功能强大、颜值爆表!

    1.引言 在当今的互联网时代,API(应用程序编程接口)已经成为连接不同软件系统的桥梁.作为一名开发者,掌握API测试技能至关重要.市面上的API测试工具琳琅满目,今天我们要介绍的是一款开源.跨平台的 ...

  3. SQL中解决i+1 & values中插入变量

    基于JDBC环境下使用mysql插入数据的一些小问题 下方代码用于实现 批量向数据库中插入数据 一般为"垃圾"数据 代码例子实现i+1的效果 i=1 i+1=2 for (int ...

  4. WinForm程序中使用Echarts图表

    WinForm程序中使用Echarts 实现原理: WebBrowser + HTML 第一步:在窗体中添加WebBrowser控件 1.在工具箱中找到WebBrowser控件,拖动到窗体中 设置We ...

  5. GPG 用法

    GPG (GnuPG) 是一种加密工具,用于数据加密和数字签名. 密钥配置 # 生成密钥 gpg --full-generate-key # 列出密钥 gpg --list-keys # 列出公钥 g ...

  6. 【Mac + Python + Selenium】之获取验证码图片code并进行登录

    自己新总结了一篇文章,对代码进行了优化,另外附加了静态图片提取文字方法,两篇文章可以结合着看:<[Python]Selenium自动化测试之动态识别验证码图片方法(附静态图片文字获取)> ...

  7. MyBatis 从入门到放弃 ( MyBatis基础总结 )

    目录 MyBatis历史 Mybatis特性 MyBatis下载 和其它持久化层技术对比 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射 ...

  8. electron-builder打包配置说明

    发现问题 通过vue建立的项目使用electron-builder打包(不会eletron打包vue项目的看这里)出exe后发现名字就直接是项目文件夹的名字,但此时想自定义汉字名称,通过尝试直接修改p ...

  9. 随机读取数组中n个元素

    需求 随机不重复的显示一系列图片 分析 可使用Math.random(),其作用是返回介于 0(包含) ~ 1(不包含) 之间的一个随机数.先获取到图片路径,将图片路径放入数组中,再随机从数组中读取n ...

  10. GitHub Star 数量前 13 的自托管项目清单

    一个多月前,我们撰写并发布了这篇文章<终极自托管解决方案指南>.在那篇文章里我们深入探讨了云端服务与自托管方案的对比.自托管的潜在挑战.如何选择适合自托管解决方案,并深入介绍了五款涵盖不同 ...