4阶矩阵(坐标系变换矩阵)逆矩阵的快速求法

ws_mj 2011-02-04 04:36:20
做碰撞检测要将大量坐标从局部坐标系A变换到局部坐标系B,要求出A到B的坐标系变换矩阵

我的方法是先求出A和B到世界坐标系的变换矩阵,然后对到B的变换矩阵求逆,再将两个矩阵相乘


矩阵形式如下:

|Ux Vx Wx Tx|
|Uy Vy Wy Ty|
|Uz Vz Wz Tz|
|0 0 0 1 |

有什么快速的方法,考虑到矩阵的特殊性
...全文
3019 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagiSu 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fallening 的回复:]

引用楼主 ws_mj 的回复:
做碰撞检测要将大量坐标从局部坐标系A变换到局部坐标系B,要求出A到B的坐标系变换矩阵

我的方法是先求出A和B到世界坐标系的变换矩阵,然后对到B的变换矩阵求逆,再将两个矩阵相乘


矩阵形式如下:

|Ux Vx Wx Tx|
|Uy Vy Wy Ty|
|Uz Vz Wz Tz|
|0 0 0 1 |

有什么快速的方法,考虑到矩……
[/Quote]

对于这样的小矩阵没必要这么做。直接参考线性代数中相应解析算法即可。
ws_mj 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 magisu 的回复:]
为什么要做两次坐标变换?以A为准,变换B不行么?
[/Quote]

应为两个局部坐标系的轴向和原点都是用世界坐标系表示的
ws_mj 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 renxu350 的回复:]
先求伴随矩阵:

伴随矩阵 = 行列式余子式的转置矩阵(就是行列式余子式得到1个矩阵,然后进行转置)

然后可以得到逆矩阵:

逆矩阵 = 伴随矩阵 / 行列式(对N阶矩阵而言就是按照第1行展开式)
[/Quote]

这个方法太慢了,对于四阶及以上的矩阵不适用
fallening 2011-02-08
  • 打赏
  • 举报
回复
或者看一下 strassen 的那篇论文,既有分块相乘的,也有分块求逆的算法
fallening 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 ws_mj 的回复:]
做碰撞检测要将大量坐标从局部坐标系A变换到局部坐标系B,要求出A到B的坐标系变换矩阵

我的方法是先求出A和B到世界坐标系的变换矩阵,然后对到B的变换矩阵求逆,再将两个矩阵相乘


矩阵形式如下:

|Ux Vx Wx Tx|
|Uy Vy Wy Ty|
|Uz Vz Wz Tz|
|0 0 0 1 |

有什么快速的方法,考虑到矩阵的特殊性
[/Quote]

google 一下 strassen 算法
MagiSu 2011-02-07
  • 打赏
  • 举报
回复
为什么要做两次坐标变换?以A为准,变换B不行么?
arong1234 2011-02-04
  • 打赏
  • 举报
回复
对原来的矩阵进行分块,分成一个3x3方阵A,一个3x1的列阵B,3个0的行阵C和一个1个元素的单位阵D
原来矩阵变为
A B
C D

假定它的逆矩阵为
A' B'
C' D'

则:
A * A' + B * C' = I(三阶单位阵)
A * B' + B * D' = 0 (3x1零矩阵)
C * A' + D * C' = 0 (1x3零矩阵)
C * B' + D * D' = 1 (一阶单位阵)
考虑C为0矩阵和D为1,根据表达式3,4很容易得到
D' = 1(一阶单位阵)
C' = 0(1x3零矩阵)
根据表达式1,A'是A的逆矩阵
而根据表达式2,可以得到A*B'=-B

很显然,只要你求出A矩阵的逆阵,整个变换矩阵的逆阵就出来了
而三解矩阵是有解析解的,如果你不知道,你可以手算一下,就可以知道了







[Quote=引用楼主 ws_mj 的回复:]
做碰撞检测要将大量坐标从局部坐标系A变换到局部坐标系B,要求出A到B的坐标系变换矩阵

我的方法是先求出A和B到世界坐标系的变换矩阵,然后对到B的变换矩阵求逆,再将两个矩阵相乘


矩阵形式如下:

|Ux Vx Wx Tx|
|Uy Vy Wy Ty|
|Uz Vz Wz Tz|
|0 0 0 1 |

有什么快速的方法,考虑到矩阵的特殊性
[/Quote]
renxu350 2011-02-04
  • 打赏
  • 举报
回复
先求伴随矩阵:

伴随矩阵 = 行列式余子式的转置矩阵(就是行列式余子式得到1个矩阵,然后进行转置)

然后可以得到逆矩阵:

逆矩阵 = 伴随矩阵 / 行列式(对N阶矩阵而言就是按照第1行展开式)
qq120848369 2011-02-04
  • 打赏
  • 举报
回复
坐标系变化是一次性的平移+旋转,世界坐标系是神马意思.

坐标系是如何用一个矩阵来描述的,这个我很费解,一个齐次矩阵就对应一个点,顶多对应个坐标系原点.
sghdls 2011-02-04
  • 打赏
  • 举报
回复


对这个没什么研究 , 帮你顶起!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧