• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Eigen::Isometry3d入门

武飞扬头像
甲壳虫奇袭电脑城
帮助1

欧式变换也称为等距变换(Isometry Transform),可以看作是维持任意两点距离不变的仿射变换。
( R o t a t e t r a n s l a t i o n 0 T 1 ) \left( \begin{matrix} Rotate &translation \\ 0^T & 1 \\ \end{matrix} \right) (Rotate0Ttranslation1)

0.初始化

共两种方法,第一种使用较为频繁。

	//设置旋转向量V
	Eigen::AngleAxisd V(3.1415926 / 4, Eigen::Vector3d(1, 0, 1).normalized());
	//设置平移向量
	Eigen::Vector3d translation(1, 3, 4);
	
	//将T初始化为单位阵,再做其他操作。
	//虽然称为3D,实质上为4*4矩阵。
	Eigen::Isometry3d T= Isometry3d::Identity();

1.两种求欧式变换矩阵

	//设置欧式变换矩阵——方式1
	//此种方式和下一种方式输出相同。
	//a.translate(b)等价于aXb,描述的是在世界坐标系下的平移(虽然b在设置时为只含有3个元素列向量,猜想内部可能会有操作时其为下面这种形式)。
	//形式为 0	0	0	1
	//      0	0	0	3
	//      0	0	0	4
	//      0	0	0	0
	//此操作相当于将translation中的数值放入欧式变换矩阵translation位置(注意!!!此种效果的前提T为单位矩阵)
	//结果为 1	0	0	1
	//      0	1	0	3
	//      0	0	1	4
	//      0	0	0	1
	T.translate(translation);
	//a.rotate(b)等价于aXb,描述的是在世界坐标系下的旋转。
	T.rotate(V);
	//结果为 0.853553	 -0.5	0.146447		1
	//           0.5	0.707	    -0.5		3
	//      0.146447	  0.5	0.853553		4
	//      	   0	    0	       0		1
	//matrix()返回变换对应的矩阵,T输出时用此函数。
	std::cout << T.matrix() << std::endl;

/*----------------------------------------------------------------------

------------------------------------------------------------------------*/

	//设置欧式变换矩阵——方式2
	//凡是前面带pre的函数,相当于右乘。
	//a.rotate(b)等价于aXb,描述的是在世界坐标系下的旋转。
	//结果为 0.853553	 -0.5	0.146447		0
	//           0.5	0.707	    -0.5		0
	//      0.146447	  0.5	0.853553		0
	//      	   0	    0	       0		1
	T.rotate(V);
	//我们的目的是为了形成文章开头欧式变换的矩阵,
	//变换顺序必须是先平移,再旋转,也就是单位矩阵E X 平移矩阵T X 旋转矩阵R。
	//按照R右乘T也就是T X R,实际和方式1相同T左乘R(T X R)这样理解就可以,
	//但是根据查看源码,只有在mode==Projective时为右乘,否则为T translation,
	//然而translation为含有3个元素的列向量,这也印证了之前的猜想,有内部机制使translation转换成下面的形式
	//形式为 0	0	0	1
	//      0	0	0	3
	//      0	0	0	4
	//      0	0	0	0
	T.pretranslate(translation);
	//结果为 0.853553	 -0.5	0.146447		1
	//           0.5	0.707	    -0.5		3
	//      0.146447	  0.5	0.853553		4
	//      	   0	    0	       0		1
	//matrix()返回变换对应的矩阵,T输出时用此函数。
	std::cout << T.matrix() << std::endl;
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgffiih
系列文章
更多 icon
同类精品
更多 icon
继续加载