查看: 4959|回复: 11

请教一个OSG中矩阵Matrix的数学相关问题

[复制链接]

该用户从未签到

发表于 2014-5-16 15:41:11 | 显示全部楼层 |阅读模式
我想根据一个变换矩阵获得   “绕x轴的角度,y轴的角度,z轴的角度”
我只知道  根据位置向量,姿态角度(这里指的是绕x轴的角度,y轴的角度,z轴的角度),放缩向量合成一个矩阵很容易,但反过来,根据一个一个变换矩阵得到  姿态角度 就搞不出来了 。

Matrix的getrotate()方法返回的是四元数。。。。。
Matrix的decompose(osg::Vec3f& t, osg:uat& r, osg::Vec3f& s, osg::Quat& so)方法返回的 r 也是四元数。。。。。
四元数的定义在百度百科搞得我晕头转向http://baike.baidu.com/view/319754.htm?fr=aladdin
大学线性代数也没讲怎么将四元数转换为三个轴的角度~~~   我想大神们一定不止一次遇到这个问题,你们是怎么做的呢?

该用户从未签到

 楼主| 发表于 2014-5-16 15:42:00 | 显示全部楼层
兄弟我有点急啊,麻烦诸位了

该用户从未签到

发表于 2014-5-16 16:42:50 | 显示全部楼层
简单一句话,四元数是无法直接转换到欧拉角度的,必须有沿轴旋转的顺序作为辅助输入参数才可以,比如HPR,PRH等。但是如果是多次级联之后,这个信息就不可能存在了。因此简单来说,没有这样的途径

该用户从未签到

 楼主| 发表于 2014-5-16 20:02:49 | 显示全部楼层
array 发表于 2014-5-16 16:42
简单一句话,四元数是无法直接转换到欧拉角度的,必须有沿轴旋转的顺序作为辅助输入参数才可以,比如HPR,P ...


虽然很遗憾,但还是非常感谢你,锐先生!
我想,回到问题本身,从一个变换矩阵(四乘四)中获得3个角度有什么途径吗?

其实我在网上找到一个公式:能从旋转矩阵得到3个角。但如果用这种方法的话怎么根据变换矩阵(包括平移旋转缩放)得到旋转矩阵呢?我有个思路您看看行得通吗? 我认为:
每个变换矩阵matrix都可以分解为三个矩阵的乘积:其旋转矩阵rotateMatrix,放缩矩阵,和平移矩阵
matrix = rotateMatrix* osg::Matrix::scale(matrix.getScale())*osg::Matrix::translate(matrix.getTrans());
由此rotateMatrix = mateix*osg::Matrix::inverse(  osg::Matrix::translate(matrix.getTrans())  )*osg::Matrix::inverse( osg::Matrix::scale(matrix.getScale())  )
您看这个思路对吗?
111.png

该用户从未签到

发表于 2014-5-16 20:43:32 | 显示全部楼层
我也不清楚转换过来的具体是不是绕X,Y,Z的旋转角度

该用户从未签到

发表于 2014-5-16 21:39:01 | 显示全部楼层
机器人学 第二章 里讲的很明白!

该用户从未签到

 楼主| 发表于 2014-5-16 22:46:01 | 显示全部楼层
cenfer 发表于 2014-5-16 21:39
机器人学 第二章 里讲的很明白!

cenfer哥,感谢你又回答我问题。

机器人学是指哪本书?
222.png
333.png

该用户从未签到

发表于 2014-5-16 22:49:46 | 显示全部楼层
wpsperson 发表于 2014-5-16 20:02
虽然很遗憾,但还是非常感谢你,锐先生!
我想,回到问题本身,从一个变换矩阵(四乘四)中获得3个角 ...

这个公式很显然是有限制的,就是我之前说过的级联顺序限制
如果有人能直接做到从四元数导出到欧拉角度的话,我相信今年的菲尔茨奖应该非他莫属

该用户从未签到

发表于 2014-5-16 22:58:18 | 显示全部楼层
本帖最后由 cenfer 于 2014-5-16 23:19 编辑
wpsperson 发表于 2014-5-16 22:46
cenfer哥,感谢你又回答我问题。

机器人学是指哪本书?


还有 一版翻译的很好!  蔡自兴的就可以。

该用户从未签到

发表于 2014-5-16 23:15:31 | 显示全部楼层
array 发表于 2014-5-16 22:49
这个公式很显然是有限制的,就是我之前说过的级联顺序限制
如果有人能直接做到从四元数导出到欧拉角度的 ...

当然 这种相互转换肯定不是一一对应的!不然osg::Matix就集成了。
一组欧拉角是需要指定旋转轴和旋转顺序的。
姿态矩阵可以反解出自定义的一组欧拉角。这样反解可能多解,解出一组即可。
姿态矩阵和四元数是互转的,所以四元数也可以反解出一组自定义的欧拉角。

欧拉角和姿态矩阵的互转在机器人学中很常见。
因为姿态矩阵的参数看上去不直接,所以机器人的目标姿态都用欧拉角表示,以方便用户查看。

该用户从未签到

 楼主| 发表于 2014-5-16 23:22:14 | 显示全部楼层
本帖最后由 wpsperson 于 2014-5-16 23:25 编辑
array 发表于 2014-5-16 22:49
这个公式很显然是有限制的,就是我之前说过的级联顺序限制
如果有人能直接做到从四元数导出到欧拉角度的 ...


我还抱怨为啥osg中矩阵的方法有getscale和gettrans,返回向量都用起来很舒服,
唯独getrotate弄个四元数很棘手

我还在抱怨计算机图形学这么多年了,矩阵提取角度都搞不出来~
我还在想自己推导一下。。。。。

听君一席话,额。。。。。。,决定不自己推导了~那个大奖让给别人吧~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表